一. u-boot编译
u-boot启动流程
u-boot编译流程
利用orangepi-build交叉编译工具
1. 运行build.sh脚本
sudo ./build.sh
2. 选择U-boot package
3. 选择开发板型号
4. 也可使用下面的命令无需通过图形界面选择,可以直接开始编译u-boot
sudo ./build.sh BOARD=orangepizero2 BRANCH=next BUILD_OPT=u-boot
5. 查看编译生成的 u-boot deb 包
ls ./output/debs/u-boot/linux-u-boot-next-orangepizero2_3.1.0_arm64.deb
6. 登录到H616开发板,卸载已安装的deb包
dpkg -l | grep linux-u-boot #查看u-boot包名称
sudo apt purge -y linux-u-boot-orangepizero2-current #卸载上面查找到的u-boot包名称,有可能是linux-u-boot-orangepizero2-next
7. 安装刚才上传的新的u-boot的deb包
sudo dpkg -i linux-u-boot-next-orangepizero2_3.1.0_arm64.deb
sudo nand-sata-install #进行烧写,一直回车
sudo reoobt -f
=========================可通过以下步骤替代==============================
1. 清理u-boot,因为上面的build.sh脚本第一步工作也是先做清理,再进行编译的
sudo chown mi:mi v2021.10-sunxi -R #修改所属用户为当前用户(根据实际用户名修改),保证当前用户下权限没有问题
cd v2021.10-sunxi
make distclean
2. 生成.config默认配置文件
make -j6 orangepi_zero2_defconfig CROSS_COMPILE="aarch64-none-linux-gnu-"
如果我们要修改配置文件,执行以下命令,然后会弹出一个菜单,去做配置即可
make menuconfig CROSS_COMPILE="aarch64-none-linux-gnu-"
4. 编译u-boot,生成u-boot-sunxi-with-spl.bin(u-boot SPL 和u-boot proper)
make -j6 CROSS_COMPILE="aarch64-none-linux-gnu-"
5. 将生成的该文件拷贝到香橙派当中
6. 替换掉旧的u-boot,可通过sudo bash -x /usr/sbin/nand-sata-install查看烧录过程,然后进行手动烧录
dd if=/dev/zero of=/dev/mmcblk1 bs=1k count=1023 seek=1 status=noxfer #格式化1k到1M为止的数据
dd if=u-boot-sunxi-with-spl.bin of=/dev/mmcblk1 bs=1k seek=8 conv=fsync
7. 进行回写操作,强制将尚未写入磁盘的数据缓冲区立即写入磁盘
sync
8. 重启
sudo reboot -f
二. 内核编译
内核编译流程
1. 运行build.sh脚本
sudo ./build.sh
2. 选择Kernel package
3. 此处可选择是否修改内核配置
4. 选择开发板型号
5. 查看编译生成的内核相关的deb包
mi@mi:~/orangepi-build$ ls output/debs/linux-*
output/debs/linux-dtb-next-sun50iw9_3.1.0_arm64.deb
output/debs/linux-image-next-sun50iw9_3.1.0_arm64.deb
output/debs/linux-headers-next-sun50iw9_3.1.0_arm64.deb
a. linux-dtb-next-sun50iw9_3.1.0_arm64.deb包含有内核使用的dtb文件 b. linux-headers-next-sun50iw9_3.1.0_arm64.deb包含内核头文件 c. linux-image-next-sun50iw9_3.0.1_arm64.deb包含内核镜像和内核模块
6. 使用下面的命令无需通过图形界面选择,可以直接开始编译kernel
sudo ./build.sh BOARD=orangepizero2 BRANCH=next BUILD_OPT=kernel KERNEL_CONFIGURE=no
7. 安装刚才上传的新的kernel的deb包
scp linux-image-next-sun50iw9_3.1.0_arm64.deb orangepi@192.168.81.202:/home/orangepi/
//卸载原有的kernel包
sudo apt purge -y linux-image-next-sun50iw9 #也有可能是linux-image-next-sun50iw9
//安装新的kernel包
sudo dpkg -i linux-image-next-sun50iw9_3.1.0_arm64.deb
//重启
sudo reboot -f
=========================可通过以下步骤替代==============================
1. 清理旧的配置文件以及生成文件
切换到超级用户然后进行操作,因为之前常规的编译方法生成的一些内核文件是root属性的,我们普通用户无法对其进行清理操作。
#安装ccahe,用于编译加速
sudo apt-get install ccache
#切换到root用户,添加交叉编译工具的路径到环境变量中,因为其对root用户是无效的
export PATH=$PATH:/home/mi/orangepi-build/toolchains/gcc-arm-9.2-2019.12-x86_64-aarch64-none-linux-gnu/bin
#做清理
make ARCH=arm64 distclean
2. 切换至/home/mi/orangepi-build/kernel/orange-pi-5.16-sunxi64目录下
直接拷贝配置文件,生成.config配置文件
//拷贝默认配置
cp ../../external/config/kernel/linux-sun50iw9-current.config .config
//根据已有的.config文件生成一个新的.config文件
make ARCH=arm64 CROSS_COMPILE="aarch64-none-linux-gnu-" olddefconfig
如果我们要修改配置文件,执行以下命令,然后会弹出一个菜单,去做配置即可
//指定交叉编译工具链以及指定为ARM64架构
make menuconfig ARCH=arm64 CROSS_COMPILE="aarch64-none-linux-gnu-"
3. 根据配置文件进行编译内核
make -j6 ARCH=arm64 'CROSS_COMPILE=ccache aarch64-none-linux-gnu-' LOCALVERSION=-sun50iw9 Image modules dtbs