参考《嵌入式Linux应用开发完全手册》“第17章 构建Linux根文件系统”,韦东山Linux视频第1期的第11课。看完这一章书,一课视频,相信你就可以完全掌握根文件系统了。
$ sudo tar xfprebuilts/gcc-x64/arm-cortexa9-linux-gnueabihf-4.9.3.tar.xz -C/opt/FriendlyARM/toolchain/
(1) 编译安装busybox
看直播视频,下面是简单的笔记。
$ tar xjfbusybox-1.26.2.tar.bz2
$ cd busybox-1.26.2/
$ make menuconfig // 设置交叉编译工具链前缀为arm-linux-, 并选择支持mount NFS
$ make
$ make install
(2) 从交叉编译工具链中复制lib库
$ cp -rf _install//work/nfs_root/fs_mini_nanoPI
$ mkdir/work/nfs_root/fs_mini_nanoPI/lib
$ cd/opt/FriendlyARM/toolchain/4.9.3/arm-cortexa9-linux-gnueabihf/lib
$ cp *so* -d /work/nfs_root/fs_mini_nanoPI/lib
(3) 构建etc目录:
只需要创建3个文件:etc/inittab、etc/init.d/rcS、etc/fstab。
内容如下。
etc/inittab:
#/etc/inittab
::sysinit:/etc/init.d/rcS
ttyS0::askfirst:-/bin/sh
::ctrlaltdel:/***in/reboot
::shutdown:/bin/umount-a -r
etc/init.d/rcS:
#!/bin/sh
mount-a
mkdir/dev/pts
mount-t devpts devpts /dev/pts
echo/***in/mdev > /proc/sys/kernel/hotplug
mdev-s
还要改变它的属性,使它能够执行:
$ chmod+x etc/init.d/rcS
etc/fstab:
#device mount-point type op
tions dump fsck order
proc /proc proc defaults 0 0
tmpfs /tmp tmpfs defaults 0 0
sysfs /sys sysfs defaults 0 0
tmpfs /dev tmpfs defaults 0 0
(4) 构建dev目录:
$ cd/work/nfs_root/fs_mini_nanoPI
$ mkdirdev
$cd dev
$ sudomknod console c 5 1
$ sudomknod null c 1 3
(5) 其他空目录,比如proc、mnt、tmp、sys等,如下创建:
$ cd/work/nfs_root/fs_mini_nanoPI
$mkdir proc mnt tmp sys var
4.2 修改配置文件自动启动APP 修改文件系统中etc/inittab或etc/init.d/rcS即可,参考第2课。
5. 自制刷机包
5.1 准备工作 按照友善之臂官方WIKI:
http://wiki.friendlyarm.com/wiki/index.php/NanoPi_NEO/zh
http://wiki.friendlyarm.com/wiki/index.php/NanoPi_M1/zh
先下载源码包得到lichee目录,再下载交叉编译工具链并放入lichee/brandy/toochain/目录下。你得到的可能是文件h3-lichee-20170119.7z,在ubuntu下需要先安装7zip工具才能解压,可以用以下命令:
$ sudoapt-get install p7zip
$7zr x -r h3-lichee-20170119.7z
然后执行如下命令编译:
$ cd lichee
$./build.sh -p sun8iw7p1 -b nanopi-h3
接着,对于nanoPINEO,执行以下命令打包系统组件:
$./gen_script.sh -b nanopi-neo
对于nanoPI M1,执行以下命令打包系统组件:
$./gen_script.sh -b nanopi-m1
本文适用于nanoPINEO和nanoPI M1,它们的操作命令只有上述这一处差别。
5.2 制作映象文件,并分区 制作一个256M的空白映象文件,你可以制作得更小或更大:
ddif=/dev/zero of=fs_nanoPI_256M.img bs=1Mcount=256
把映象文件设置为“回环设备”:
sudolosetup /dev/loop0 fs_nanoPI_256M.img
划出2个分区,注意第1个分区起始地址要大于(16400K+1000K),我们取它的偏移地址为20M,大小为32M;第2个分区只要大过fs_mini_nanoPI即可,我们取为128M。
$sudo fdisk /dev/loop0
分区信息如下:
Device Boot Start End Blocks Id System
/dev/loop0p1 40960 106495 32768 83 Linux
/dev/loop0p2 106496 368639 131072 83 Linux
识别分区,并格式化:
$ sudopartprobe /dev/loop0
$sudo mkfs.vfat -I /dev/loop0p1
$sudo mkfs.ext4 /dev/loop0p2
5.3 烧写bootloader$ cdtools/pack/out/
$ sudodd if=boot0_sdcard.fex of=/dev/loop0 bs=1k seek=8
$ sudodd if=u-boot.fex of=/dev/loop0 bs=1k seek=16400
5.4 烧写内核$ cdlinux-3.4/output/
$sudo mount -t vfat /dev/loop0p1 /mnt
$ sudocp boot.img /mnt
$sudo umount /mnt
5.5 烧写文件系统$ cd cd /work/nfs_root/fs_mini_nanoPI/
$sudo mount /dev/loop0p2 /mnt
$sudo cp * -rfd /mnt
$sudo umount /mnt
5.6 卸载回环设备,烧写SD卡$ sudolosetup -d /dev/loop0
至此,得到映象文件fs_nanoPI_256M.img,可以使用工具win32diskimager把它烧到SD卡中,此SD卡即可用来启动nanoPI。
5.7 辅助命令 本节的命令是在开发板上运行的。
(1) 挂载NFS:
#ifconfig eth0 192.168.1.18
# mount-t nfs -o nolock,vers=2 192.168.1.123:/work/nfs_root/fs_mini_nanoPI /mnt