返回> 网站首页
licheepi-nano(荔枝派) - Linux编译
yoours2022-07-16 17:08:03
【嵌入式】
简介一边听听音乐,一边写写文章。
一、编译环境
1. 系统:ubuntu_22.04x64
2. 编译源码
a) uboot_2022.04
b) linux_5.18
c) buildroot_2022.05
3. 部分配置文件
arch/arm/Kconfig
configs/licheepi_nano_defconfig
arch/arm/dts/suniv-f1c100s-licheepi-nano.dts
4. 交叉编译工具
a) 工具地址
b) 下载编译工具
tar -vxJf gcc-arm-11.2-2022.02-x86_64-arm-none-linux-gnueabihf.tar.xz
sudo cp -r ./gcc-arm-11.2-2022.02-x86_64-arm-none-linux-gnueabihf /opt/
c) 配置编译工具
sudo vi /etc/bash.bashrc
PATH="$PATH:/opt/gcc-arm-11.2-2022.02-x86_64-arm-none-linux-gnueabihf/bin"
d) 使路径生效
source /etc/bash.bashrc
e) 查看gcc版本
arm-none-linux-gnueabihf-gcc -v
5. 编译工具依赖
sudo apt-get install git
sudo apt-get install make
sudo apt-get install gcc
sudo apt-get install bison
sudo apt-get install flex
sudo apt-get install python3-distutils
sudo apt-get install swig
sudo apt-get install libpython3-dev
sudo apt-get install libssl-dev
sudo apt-get install libncurses-dev
sudo apt-get install pkg-config
sudo apt-get install build-essential
sudo apt-get install cmake rsync unzip bc
二、编译uboot
1. g源码
git clone https://github.com/u-boot/u-boot.git
cd u-boot
2. 查看分支
git branch -a
3. 切换到 v2022.04 分支
git checkout v2022.04
4. 编译命令
make distclean // 彻底清除工程之前编译的中间和配置文件
make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabihf- licheepi_nano_defconfig
make ARCH=arm menuconfig // 图形配置
make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabihf- -j8
5. uboot参数
a) 新建 uboot.cmd 文件,并写入以下内容:
setenv bootargs console=tty0 console=ttyS0,115200 panic=5 rootwait root=/dev/mmcblk0p2 earlyprintk rw
load mmc 0:1 0x80800000 zImage
load mmc 0:1 0x80D00000 suniv-f1c100s-licheepi-nano.dtb
bootz 0x80800000 - 0x80D00000
b) 生成 boot.scr
uboot --> tools -->mkimage ,通过该程序生成boot.scr
mkimage -C none -A arm -T script -d boot.cmd boot.scr
最后将其放入第一分区
c) 手动启动方法
fatload mmc 0:1 ${scriptaddr} boot.scr; source ${scriptaddr}
d) 修改头文件配置方法
vi include/configs/suniv.h
// 添加以下代码(mmc 0为TF卡,1是第一分区,文件系统为fat32,把zImage和dtb文件拷入DRAM)
#define CONFIG_BOOTCOMMAND "fatload mmc 0:1 0x80800000 zImage; " \
"fatload mmc 0:1 0x80D00000 suniv-f1c100s-licheepi-nano.dtb; " \
"bootz 0x80800000 - 0x80D00000;"
// linux将使用uart0进行交互,等待5s重启,根文件系统在mmc0(tf卡)第二分区(EXT4),等待 mmc 设备初始化完成以后再挂载,开启读写权限
#define CONFIG_BOOTARGS "console=ttyS0,115200 panic=5 root=/dev/mmcblk0p2 rootwait rw"
// 回到命令行
make ARCH=arm menuconfig
取消勾选 [] Enable a default value for bootcmd
勾选 [v] Enable boot arguments;
e) uboot命令下执行方法
setenv bootcmd 'fatload mmc 0:1 0x80800000 zImage;fatload mmc 0:1 0x80D00000 suniv-f1c100s-licheepi-nano.dtb;bootz 0x80800000 - 0x80D00000;'
saveenv
f) uboot下查看环境变量信息
printenv
三、sunxi-tools
1. 下载安装
sudo apt-get install libusb-1.0-0-dev
git clone -b f1c100s-spiflash https://github.com/Icenowy/sunxi-tools.git
cd sunxi-tools
make && sudo make install
2. 不插卡上电
新到的一片 Nano ,基本上是上电无反应的,LCD亮但无内容。
此时 Nano 自动进入fel下载模式,可以通过命令 sudo sunxi-fel ver 来确认有无成功进入fel模式。
a)以 uboot file-with-spl形式进行(单次运行,调试用)
sunxi-fel uboot /your/path/to/u-boot-sunxi-with-spl.bin
b)烧进 spi-flash (开机自启)
sunxi-fel -p spiflash-write 0 /your/path/to/u-boot-sunxi-with-spl.bin
3. fel模式进入方法
为了不擦除之前烧录的u-boot固件,这里只能使用短接spi flash的1、4引脚后上电的方法。
四、linux
1. git下载
git clone -b v5.18 https://github.com/torvalds/linux.git
2.配置
/arch/arm/boot/dts/suniv-f1c100s-licheepi-nano.dts
/arch/arm/configs/f1c100s_nano_linux_defconfig
make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabihf- f1c100s_nano_linux_defconfig
make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabihf- menuconfig
3.编译
make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabihf- -j8
make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabihf- -j8 INSTALL_MOD_PATH=out modules
make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabihf- -j8 INSTALL_MOD_PATH=out modules_install
4. 编译设备树
make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabihf- dtbs
5. 单独编译设备树
./scripts/dtc/dtc -I dts -O dtb -o suniv-f1c100s-licheepi-nano.dtb arch/arm/boot/dts/suniv-f1c100s-licheepi-nano.dts
6. 编译成功后,生成文件所在位置:
内核img文件:./arch/arm/boot/zImage
设备树dtb文件:./arch/arm/boot/dts/suniv-f1c100s-licheepi-nano.dtb
modules文件夹:./out/lib/modules
7. 备份配置文件
make savedefconfig
mv defconfig arch/arm/configs/xxx_defconfig
五、文件系统
1. Buildroot下载
wget https://buildroot.org/downloads/buildroot-2022.05.tar.gz
tar xvf buildroot-2022.05.tar.gz
cd buildroot-2022.05
2.Buildroot安装依赖
sudo apt-get install linux-headers-$(uname -r)
3. Buildroot编译
make menuconfig
4. Buildroot配置
- Target options
- Target Architecture (ARM (little endian))
- Target Variant arm926t
- Toolchain
- C library (musl) # 使用musl减小最终体积
- System configuration
- Use syslinks to /usr .... # 启用/bin, /sbin, /lib的链接
- Enable root login # 启用root登录
- Run a getty after boot # 启用登录密码输入窗口
make
六、自定义ko驱动编译
1. Makefile
KERN_DIR =/root/2022/linux-6.0/
obj-m += testled.o
all:
make -C $(KERN_DIR) M=`pwd` modules
clean:
make -C $(KERN_DIR) M=`pwd` modules clean
#rm -rf modules.order
2. 编译和使用
make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabihf-
insmod testled.ko
lsmod
rmmod
cat /proc/devices
cat /proc/modules