nanopi-m1移植Linux4.14

Linux-4.14内核是全志H3的主线内核,是一个非常纯净的内核。而以前使用多半是基于全志公司定制开发的linux3.4,发现它并没有支持设备树。

  • 编译安装uboot

 安装交叉编译器

推荐使用的交叉编译器arm-cortexa9-linux-gnueabihf-4.9.3.tar.xz

tar xf arm-cortexa9-linux-gnueabihf-4.9.3.tar.xz //解压
export PATH=~/4.9.3/bin:$PATH //编译器的路径加入到PATH
arm-linux-gcc -v //查看是否安装成功

 编译uboot

下载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 //设置环境
make nanopi_h3_defconfig ARCH=arm CROSS_COMPILE=arm-linux-    //配置
make ARCH=arm CROSS_COMPILE=arm-linux- //编译

编译完成后在u-boot源码中会生成u-boot-sunxi-with-spl.bin 和u-boot.bin 前者是与启动方式有关 后者与启动方式无关的bootloader

  • 下载, 编译linux内核

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

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

编译内核:

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文件

  •  制作刷机包

制作一个 512M 的空白映象文件:

扫描二维码关注公众号,回复: 4896812 查看本文章
dd if=/dev/zero of=fs_nanopi-m1_512M.img bs=1M count=512

把映象文件设置为“回环设备”:

sudo losetup /dev/loop0  fs_nanopi-m1_512M.img

分区:第一个分区格式化成FAT文件系统,来转载内核和设备树,大小设置成30M 第二个分区格式化成ext4文件系统,我们使用前面使用buildroot构建的文件系统,大小设置成256M 可以参看在nanopi-neo构建文件系统相关章节 第一个分区前面偏移20M,前面的无名分区放uboot 使用fdisk命令分区

sudo fdisk /dev/loop0
分区完后可以看到分区信息

识别分区, 并格式化:

sudo partprobe /dev/loop0
$ sudo mkfs.vfat -I /dev/loop0p1
$ sudo mkfs.ext4 /dev/loop0p2

烧写 bootloader

cd u-boot
$ sudo dd if=u-boot-sunxi-with-spl.bin of=/dev/loop0 bs=1k seek=8
$ sudo dd if=u-boot.bin of=/dev/loop0 bs=1k seek=16400

烧写内核和设备树

cd linux
sudo mount -t vfat /dev/loop0p1 /mnt
sudo arch/arm/boot/zImage arch/arm/boot/dts/sun8i-h3-nanopi-m1.dtb /mnt
sudo umount /mnt

烧写文件系统

cd ~/build_root/nfs_root
sudo mount /dev/loop0p2 /mnt
sudo cp * -rfd /mnt
sudo umount /mnt

卸载回环设备, 烧写 TF 卡

sudo losetup -d /dev/loop0

卸载完后将得到映像文件fs_nanopi-m1_512M.img,用工具 win32diskimager 把它烧到 TF 卡中,此 TF 卡即可用来启动 nanopi-m1

板子上电后,有uboot启动信息,但不能启动内核,还需设置两个重要的环境变量bootcmd和bootargs。设置前者就是把内核和dtb从TF卡上读取到指定的内存位置,然后从指定位置启动内核并在指定的内存解析dtb文件。后者指定了根文件系统位于哪个分区

setenv bootcmd "fatload mmc 0:1 46000000 zImage;fatload mmc 0:1 47000000 sun8i-h3-nanopi-m1.dtb;bootz 46000000 0:0 47000000"
setenv bootargs "root=/dev/mmcblk1p2 rw console=ttyS0,115200"
saveenv

设置完成后,即可正确进入文件系统

  •  更新内核 和设备树

    在开发过程中需要调试板子,需要不断更新内核和设备树文件。启动进入文件系统后 mount /dev/mmcblk1p1 /mnt 出现ascii not found 还需指定字符集 mount -t vfat -o iocharset=cp437 /dev/mmcblk1p1 /mnt

使用cp zImage /mnt 然后 umount /mnt 重启后即可以看到内核被更新了 cp sun8i-h3-nanopi-m1.dtb /mnt    umount /mnt 重启后即可以看到设备树文件被更新了

猜你喜欢

转载自blog.csdn.net/qq_18737805/article/details/86410337