NanoPi NEO Air使用七:获取并编译U-boot和Linux的源码

Posted qlexcel

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了NanoPi NEO Air使用七:获取并编译U-boot和Linux的源码相关的知识,希望对你有一定的参考价值。

安装交叉编译器

访问此处下载地址的toolchain目录,下载交叉编译器arm-cortexa9-linux-gnueabihf-4.9.3.tar.xz,然后解压编译器:

mkdir -p /opt/FriendlyARM/toolchain
tar xf arm-cortexa9-linux-gnueabihf-4.9.3.tar.xz -C /opt/FriendlyARM/toolchain/

然后将编译器的路径加入到PATH中,用vi编辑vi ~/.bashrc,在末尾加入以下内容:

export PATH=/opt/FriendlyARM/toolchain/4.9.3/bin:$PATH
export GCC_COLORS=auto

执行一下~/.bashrc脚本让设置立即在当前shell窗口中生效,注意"."后面有个空格:

. ~/.bashrc

这个编译器是64位的,不能在32位的Linux系统上运行,安装完成后,你可以快速的验证是否安装成功:

arm-linux-gcc -v
gcc version 4.9.3 (ctng-1.21.0-229g-FA)

编译U-boot

下载U-boot源码,并切换分支:

git clone https://github.com/friendlyarm/u-boot.git -b sunxi-v2017.x --depth 1

编译U-boot:

apt-get install swig python-dev python3-dev
cd u-boot
make nanopi_h3_defconfig ARCH=arm CROSS_COMPILE=arm-linux-
make ARCH=arm CROSS_COMPILE=arm-linux-

这里使用的配置文件nanopi_h3_defconfig可以支持友善电子所有的H3/H2+的开发板。
编译成功后会生成文件u-boot-sunxi-with-spl.bin。

更新TF上的U-boot:

执行如下命令更新U-boot:

cd u-boot
dd if=u-boot-sunxi-with-spl.bin of=/dev/sdX bs=1024 seek=8
sync && eject /dev/sdX

/dev/sdx请替换为实际的TF卡设备文件名。
sync命令可以确保数据成功写到TF卡中,eject命令用于弹出TF卡。


可以根据U-boot的编译日期来判断U-boot是否被更新。

使用SCP在线更新U-boot:

当正在使用TF卡运行系统时,也可以先用scp命令拷贝u-boot-sunxi-with-spl.bin到开发板上,然后用dd命令更新SD卡上的U-boot:

scp u-boot-sunxi-with-spl.bin root@192.168.0.103:/root/
dd if=/root/u-boot-sunxi-with-spl.bin of=/dev/mmcblk0 bs=1024 seek=8

如果是带有eMMC的开发板,当正在使用eMMC运行系统时,也可以先用scp命令拷贝u-boot-sunxi-with-spl.bin到开发板上,然后用dd命令更新eMMC上的U-boot:

scp u-boot-sunxi-with-spl.bin root@192.168.0.103:/root/
dd if=/root/u-boot-sunxi-with-spl.bin of=/dev/mmcblk0 bs=1024 seek=8

NanoPi H3/H2+开发板的启动设备的设备节点总是/dev/mmcblk0。

编译Linux内核

下载Linux内核源码,并切换分支:

$ git clone https://github.com/friendlyarm/linux.git -b sunxi-4.14.y --depth 1

编译和更新Linux内核:

$ apt-get install u-boot-tools
$ cd linux
$ touch .scmversion
$ make sunxi_defconfig ARCH=arm CROSS_COMPILE=arm-linux-
$ make zImage dtbs ARCH=arm CROSS_COMPILE=arm-linux-

编译完成后会在arch/arm/boot/目录下生成zImage,并且在arch/arm/boot/dts/目录下生成dtb文件。

将TF卡插入PC中,使用df -h查看TF中boot分区所在路径

使用命令mkdir /mnt/tmp在/mnt下新建tmp文件夹
使用命令mount /dev/sdb1 /mnt/tmp把TF的boot分区挂载到/mnt/tmp

执行如下命令更新TF卡上的zImage和dtb文件:

$ cp arch/arm/boot/zImage /mnt/tmp
$ cp arch/arm/boot/dts/sun8i-*-nanopi-*.dtb /mnt/tmp

使用SCP在线更新内核

$ scp arch/arm/boot/zImage root@192.168.1.230:/boot
$ scp arch/arm/boot/dts/sun8i-*-nanopi-*.dtb root@192.168.1.230:/boot

编译和更新驱动模块:

$ cd linux
$ make modules ARCH=arm CROSS_COMPILE=arm-linux-

假设TF卡的rootfs分区挂载在/mnt/tmp,更新SD卡上rootfs的驱动模块:

$ cd linux
$ make modules_install INSTALL_MOD_PATH=/mnt/tmp ARCH=arm CROSS_COMPILE=arm-linux-

以上是关于NanoPi NEO Air使用七:获取并编译U-boot和Linux的源码的主要内容,如果未能解决你的问题,请参考以下文章

NanoPi NEO Air使用四:操作GPIO

NanoPi NEO Air使用二:固件烧录

NanoPi NEO Air使用十三:使用自带的fbtft驱动点亮SPI接口TFT屏幕,ST7789V,模块加载的方式

NanoPi NEO Air使用十:自己编写驱动来控制LED

NanoPi NEO Air使用六:使用摄像头

NanoPi NEO Air使用十三:移植RTL8723BU驱动