前段时间研究了一下如何使用busybox编译和生成最简linux根文件系统(rootfs),并在mini2440开发板上使用NFS网络文件系统进行挂载启动,今天继续研究如何将该根文件系统烧录到开发板上去,以便实现本地启动,无需借助NFS。
第1步、生成rootfs根文件系统
这一步可参考我另一篇博客(如何使用busybox编译和生成最简linux根文件系统(rootfs))中的方法和步骤。如果想简单起见,也可直接下载我已经编译好的成果(mini2440最精简的rootfs文件系统)。里面的压包解开来就是一个rootfs根文件系统的全部目录,可以直接用于下一步的操作。
第2步、生成img镜像文件
这里我们按照友善之臂的官方推荐,使用mkyaffs2image工具。首先将光盘里的mkyaffs2image.tgz解压出来。具体方法是,进入到mkyaffs2image.tgz所在的目录,然后使用下面的命令:
sudo tar -xvzf mkyaffs2image.tgz -C /
便可将压缩包里的工具解压到/usr/sbin目录下了。注意此处会解压出2个文件,分别是:
- usr/sbin/mkyaffs2image
- usr/sbin/mkyaffs2image-128M
其中第一个mkyaffs2image是制作适用于NANDFLASH为64M版本文件系统映象的工具,mkyaffs2image-128M则是 制作适用于128M/256M/512M/1GB版本文件系统映象的工具。由于我本人的开发板是64M的版本,因此以下我直接使用mkyaffs2image,请各位根据自己的情况调整。
然后进入到你所生成好的rootfs根文件系统所在的目录,比如我的就放在/opt/FriendlyARM/mini2440目录下,采用mkyaffs2image工具直接进行打包即可:
leon@Ubuntu:/opt/FriendlyARM/mini2440$ mkyaffs2image rootfs rootfs.img
mkyaffsimage: image building tool for YAFFS built Apr 29 2008
Processing directory rootfs into image file rootfs.img
Object 257, rootfs/sys is a directory
Object 258, rootfs/.ash_history is a file, 1 data chunks written
Object 259, rootfs/sbin is a directory
Object 260, rootfs/sbin/loadkmap is a symlink to "../bin/busybox"
Object 261, rootfs/sbin/blockdev is a symlink to "../bin/busybox"
Object 262, rootfs/sbin/mkdosfs is a symlink to "../bin/busybox"
Object 263, rootfs/sbin/klogd is a symlink to "../bin/busybox"
Object 264, rootfs/sbin/mdev is a symlink to "../bin/busybox"
Object 265, rootfs/sbin/lsmod is a symlink to "../bin/busybox"
【这里略去1234567.......】
Object 649, rootfs/usr/bin/beep is a symlink to "../../bin/busybox"
Object 650, rootfs/usr/bin/unexpand is a symlink to "../../bin/busybox"
Object 651, rootfs/usr/bin/sort is a symlink to "../../bin/busybox"
Object 652, rootfs/usr/bin/xargs is a symlink to "../../bin/busybox"
Object 653, rootfs/usr/bin/uuencode is a symlink to "../../bin/busybox"
Object 654, rootfs/usr/bin/unxz is a symlink to "../../bin/busybox"
Object 655, rootfs/usr/bin/free is a symlink to "../../bin/busybox"
Object 656, rootfs/usr/bin/rx is a symlink to "../../bin/busybox"
Object 657, rootfs/usr/bin/sha256sum is a symlink to "../../bin/busybox"
Object 658, rootfs/linuxrc is a symlink to "bin/busybox"
Operation complete.
402 objects in 13 directories
12103 NAND pages
FriendlyARM Computer Technology Inc.
工具就会将rootfs目录打包成一个img镜像文件,如下:
leon@Ubuntu:/opt/FriendlyARM/mini2440$ ll
总用量 6276
drwxrwxr-x 8 leon leon 4096 8月 15 16:13 ./
drwxr-xr-x 4 leon leon 4096 8月 15 10:47 ../
drwxrwxr-x 11 leon leon 4096 10月 6 2017 rootfs/
-rw------- 1 leon leon 6390384 8月 15 16:13 rootfs.img
第3步、将镜像文件烧录到开发板中
这里我使用的boot是supervivi及其配套的下载工具,具体的步骤请参见我的另一篇博客(如何在64位WIN7/WIN10系统中安装mini2440开发板的USB驱动和调试工具)。
给开发板上电,串口端会输出以下提示信息:
##### FriendlyARM BIOS for 2440 #####
[x] bon part 0 320k 2368k
[v] Download vivi
[k] Download linux kernel
[y] Download root_yaffs image
[a] Absolute User Application
[n] Download Nboot
[l] Download WinCE boot-logo
[w] Download WinCE NK.bin
[d] Download & Run
[z] Download zImage into RAM
[g] Boot linux from RAM
[f] Format the nand flash
[b] Boot the system
[s] Set the boot parameters
[u] Backup NAND Flash to HOST through USB(upload)
[r] Restore NAND Flash from HOST through USB
[q] Goto shell of vivi
[i] Version: 1026-12
Enter your selection:
直接输入y,启动下载流程。然后在SuperViVi USB Transfer Utility中,点击upload选择img镜像文件即可。
将rootfs根文件系统下载至开发板
同时,串口助手端也会给出信息:
Now, Downloading [ADDRESS:30000000h,TOTAL:6390394]
Downloaded file at 0x30000000, size = 6390384 bytes
Flash params: oobsize = 16, oobblock = 512, erasesize = 16384, partition size = 61456384
Erasing and programming NAND with yaffs image
Block erasing(addr/count) --- Block bad(addr/count) --- Block processed/All(%)
--------------------------------------------------------------------------------
0x03ff8000/03749 0x030e8000/00002 03751/03751=100%
Load yaffs OK:
Blocks scanned: 3751, Blocks erased: 3749, Blocks are bad: 2
RECEIVED and Writed FILE SIZE: 6390394 (156KB/S, 40S)
然后给开发板断电重启,就会看到所下载的rootfs根文件系统已经稳稳的运行在你的mini2440开发板中了。
[root@LEON2440 ~]# ls -l
total 3928
drwxrwxr-x 1 1000 1000 512 Feb 3 2017 bin
-rw-rw-r-- 1 1000 1000 71 Oct 3 2017 changelog@leon
drwxr-xr-x 2 root root 0 Jan 1 00:00 dev
drwxrwxr-x 1 1000 1000 512 Feb 3 2017 etc
lrwxrwxrwx 1 1000 1000 11 Feb 3 2017 linuxrc -> bin/busybox
drwx------ 1 root root 512 Jan 1 00:00 lost+found
drwxrwxr-x 1 1000 1000 512 Oct 3 2017 mnt
dr-xr-xr-x 25 root root 0 Jan 1 00:00 proc
drwxrwxr-x 1 1000 1000 512 Feb 3 2017 sbin
drwxr-xr-x 11 root root 0 Jan 1 00:00 sys
drwxr-xr-x 2 root root 0 Jan 1 00:00 tmp
-rw-rw-r-- 1 1000 1000 1751132 Feb 4 2017 uImage.img
drwxrwxr-x 1 1000 1000 512 Feb 3 2017 usr