u-boot/内核编译

一. u-boot编译

 u-boot启动流程

50154db2462c46aeb2bc4b8624935a26.jpeg

 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

 ddf71f11c4774e7fb1d3ed22df12911a.png

 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

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

@尘音

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值