一, 前言
本章记录在 BananaPi 上移植 Linux 内核的过程, 跟 u-boot 一样, 官方源码同样完美支持 BananaPi, 这样移植起来就非常方便了, 不需要更改一行代码, 一个文件. Linux 内核对 BananaPi 板级资源通过设备树的形式进行加载, 无需修改底层平台代码. 只需编译设备树文件即可.
二, 移植 Linux 内核
1, 下载官方 Linux 内核源码.
wget https://mirrors.edge.kernel.org/pub/linux/kernel/v5.x/linux-5.1.8.tar.gz
2, 解压 Linux 内核源码.
tar xzvf Linux-5.1.8.tar.gz
3, 配置 Linux 内核, 使用官方提供的全志系列处理器默认配置.
- cd Linux-5.1.8/
- make ARCH=ARM CROSS_COMPILE=ARM-Linux-gnueabihf- sunxi_defconfig
4, 编译内核镜像 zImage.
make ARCH=ARM CROSS_COMPILE=ARM-Linux-gnueabihf- -j4 zImage
5, 编译 BananaPi 设备树.
make ARCH=ARM CROSS_COMPILE=ARM-Linux-gnueabihf- -j4 sun7i-a20-bananapi.dtb
6, 编辑 boot.cmd.
- cd arch/ARM/boot/
- VIM boot.cmd
- setenv bootargs console=ttyS0,115200 console=tty0 disp.screen0_output_mode=EDID:1280x720p50 hdmi.audio=EDID:0 console=tty1 root=/dev/mmcblk0p2 rw rootfstype=ext4 elevator=deadline rootwait
- load mmc 0 0x43000000 sun7i-a20-bananapi.dtb
- load mmc 0 0x48000000 zImage
- bootz 0x48000000 - 0x43000000
7, 安装 u-boot 工具 mkimage.
sudo cp ~/bananapi/u-boot/u-boot-2018.09/tools/mkimage /usr/local/bin/
8, 生成 boot.scr.
mkimage -A ARM -O Linux -T script -C none -a 0 -e 0 -n 'Execute Boot Script' -d boot.cmd boot.scr
9, 拷贝 boot.scr,sun7i-a20-bananapi.dtb,zImage 三个文件到 SD 卡中.
- sudo mount /dev/sdb1 /mnt
- sudo cp boot.scr dts/sun7i-a20-bananapi.dtb zImage /mnt/
- sudo umount /mnt
三, 结束
至此 Linux 内核已经可以正常启动了, 不过由于没有根文件系统, 最终会卡死.
来源: http://www.bubuko.com/infodetail-3117912.html