Day01 Uboot编译
一. 安装环境
1. 安装依赖
sudo apt-get install gcc make cmake rsync wget unzip build-essential git bc swig libncurses5-dev libpython3-dev libssl-dev python3-distutils android-tools-mkbootimg -y
2. 安装编译器
wget http://releases.linaro.org/components/toolchain/binaries/7.2-2017.11/arm-linux-gnueabi/gcc-linaro-7.2.1-2017.11-x86_64_arm-linux-gnueabi.tar.xz tar -vxJf gcc-linaro-7.2.1-2017.11-x86_64_arm-linux-gnueabi.tar.xz sudo cp -r ./gcc-linaro-7.2.1-201711-x86_64_arm-linux-gnueabi /opt/ sudo vim /etc/bash.bashrc // 添加路径 PATH="$PATH:/opt/gcc-linaro-7.2.1-2017.11-x86_64_arm-linux-gnueabi/bin" // 路径生效 source /etc/bash.bashrc
二、 编译uboot
1. 获取uboot
sudo apt-get install git
git clone https://gitee.com/LicheePiNano/u-boot.git
cd u-boot
# 查看分支
git branch -a
# 切换到 Nano 分支
git checkout nano-lcd800480
2. 配置uboot
# 此处告知make采用arm-linux-gnueabi下的所有交叉编译工具,目标架构为Arm,设定各项默认配置为 nano 的spiflash支持版 make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- f1c100s_nano_uboot_defconfig # 若不带spi-flash的板子,请换成 licheepi_nano_defconfig # 进行可视化配置 make ARCH=arm menuconfig # 配置Boot arguments(NEW) console=tty0 console=ttyS0,115200 panic=5 rootwait root=/dev/mmcblk0p2 rw # 配置bootcmd value load mmc 0:1 0x80C00000 suniv-f1c100s-licheepi-nano.dtb;load mmc 0:1 0x80008000 zImage;bootz 0x80008000 - 0x80C00000;
3. 解决重定义
# 注释掉 BOOTCOMMAND vim include/configs/suniv.h
4. 编译
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- -j4
5. 最后得到u-boot-sunxi-with-spl.bin
三、编译Linux
1. 获取linux
git clone --depth=1 -b master https://gitee.com/LicheePiNano/Linux.git make ARCH=arm f1c100s_nano_linux_defconfig make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- -j4
2. 编译完成后得到目标文件
内核img文件:./arch/arm/boot/zImage
设备树dtb文件:./arch/arm/boot/dts/suniv-f1c100s-licheepi-nano.dtb
四、编译rootfs
1. 获取rootfs
# 安装依赖 apt-get install linux-headers-$(uname -r) wget https://buildroot.org/downloads/buildroot-2021.02.4.tar.gz tar xvf buildroot-2021.02.4.tar.gz cd buildroot-2021.02.4/ make menuconfig
五、制作SD启动
1. SD分区
# 安装gparted分区工具 sudo apt-get install gparted
2. 创建分区
# 如果有分区先卸载--》删除--》然后确认 # 创建第一分区BOOT 之前空余空间:1M 新大小:32M 文件系统:fat16(一定要是fat16) 卷标:BOOT # 创建第二分区rootfs 之前空余空间:0 新大小:200M 文件系统:ext4 卷标:rootfs
3. 写入固件:
1. 写入u-boot
# uboot起始地址从SDCard的8K偏移地址开始写 sudo dd if=u-boot-sunxi-with-spl.bin of=/dev/sdc bs=1024 seek=8 #写完以后一定要sync sync
2. 写入linux和dtb
# 将linux和设备写入到SDCard的第一分区BOOT分区 sudo mount /dev/sdb1 /mnt/ sudo cp zImage /mnt/ sync sudo cp suniv-f1c100s-licheepi-nano.dtb /mnt/ sync
sudo umount /dev/sdb1
3.至此应该可以正常启动,将SDCard插入licheepi
从面可以看到uboot正常启动,linux也可以启动了,但是找不到文件系统,因此这里挂载失败;
六、编译rootfs
1. 获取buildroot
# 安装依赖 apt-get install linux-headers-$(uname -r) wget https://buildroot.org/downloads/buildroot-2021.02.4.tar.gz tar xvf buildroot-2021.02.4.tar.gz cd buildroot-2021.02.4/ make menuconfig
2. 配置buildroot
参考: