1.利用buildroot自动生成
A。确保自己已经建立好了可以使用的buildroot
具体如何建立,请参考其他相关资料
B。配置使buildroot支持ext2的rootfs
make menuconfig
Target filesystem
options --->
| | [*] ext2 root
filesystem
| | (0) size in blocks (leave at 0 for
auto calculation)
| | (0) inodes (leave at 0 for
auto calculation)
| | (0) reserved blocks
percentage
这样,保存退出之后,再make
buildroot就会自动去下载并编译,生成对应的genext2fs工具,
去制作生成对应的rootfs镜像了,生成的文件在:
binaries/uclibc/rootfs.arm-.ext2
2.利用工具mke2fs工具手动制作rootfs
前提:
A。根文件系统所有需要的文件都已经准备好了
此处放在root文件夹下,ls结果为:
drwxr-xr-x 19
root root 4.0k Dec 31 17:06 ./
drwxr-xr-x 19 root
root 4.0k Dec 31 17:06 ../
drwxr-xr-x 2 root root 4.0k
Sep 23 2009 bin/
drwxr-xr-x 11 root root 8.0k Sep 20 2009
dev/
drwxr-xr-x 5 root root 4.0k Sep 23 2009
etc/
drwxr-xr-x 3 root root 4.0k Sep 20 2009
home/
drwxr-xr-x 3 root root 4.0k Sep 23 2009
lib/
lrwxrwxrwx 1 root root 11 Dec 31 17:04 linuxrc ->
bin/busybox*
drwx------ 2 root root 16.0k Dec 31 17:01
lost+found/
drwxr-xr-x 4 root root 4.0k Sep 20 2009
media/
drwxr-xr-x 4 root root 4.0k Dec 31 17:01
mnt/
drwxr-xr-x 2 root root 4.0k Sep 20 2009
opt/
dr-xr-xr-x 29 root root 0 Dec 31 17:00
proc/
drwxr-xr-x 2 root root 4.0k Sep 23 2009
root/
drwxr-xr-x 2 root root 4.0k Sep 23 2009
sbin/
drwxr-xr-x 10 root root 0 Dec 31 17:00
sys/
drwxr-xr-x 2 root root 4.0k Sep 23 2009
test/
drwxrwxrwt 2 root root 40 Dec 31 17:00
tmp/
drwxr-xr-x 7 root root 4.0k Sep 20 2009
usr/
drwxr-xr-x 3 root root 4.0k Sep 20 2009 var/
B下载需要的工具的源码
此处需要mke2fs工具,其作用是:
针对一个分区/设备,创建一个ext2/ext3的文件系统
对于mke2fs的用法,简单提示一下:
a.常见得mkfs.ext2 和
mkfs.ext3其实就是mke2fs的链接,即制作ext2和ext3都是用的mke2fs这个工具:
-rwxr-xr-x 1 root
root 53.8k Sep 23 2009 mke2fs*
lrwxrwxrwx 1 root
root 6 Dec 31 17:04 mkfs.ext2 -> mke2fs*
lrwxrwxrwx 1
root root 6 Dec 31 17:04 mkfs.ext3 -> mke2fs*
b.如果参数是-j,表示加上日志,就是ext3,否则默认的是ext2.
制作ext2/ext3的rootfs的步骤:
A .格式化设备/分区
mkfs.ext2
/dev/lba
输入结果如下:
[root@10 mnt]# mkfs.ext2 /dev/lba
mke2fs 1.39
(29-May-2006)
Filesystem label=
OS type: Linux
Block size=4096
(log=2)
Fragment size=4096 (log=2)
488640 inodes, 976640 blocks
48832
blocks (500%) reserved for the super user
First data block=0
Maximum
filesystem blocks=1002438656
30 block groups
32768 blocks per group, 32768
fragments per group
16288 inodes per group
Superblock backups stored on
blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736
Writing inode tables: done
Writing superblocks
and filesystem accounting information: done
This filesystem will be automatically checked every 31 mounts or
180 days,
whichever comes first. Use tune2fs -c or -i to override.
B。挂载设备
注:此处我们nfs启动
将/dev/lba这个块设备mount上去:
mkdir
/mnt/lba
mount -t ext2 /dev/lba /mnt/lba
C。拷贝所有的rootfs的文件到ext2分区里
cp root/* /mnt/lba -a
注意: cp命令此处的-a参数即-dpR,即
-d
保留链接,如果不加此参数,拷贝时候就会直接拷贝文件,就会极大增加拷贝后的rootfs的大小
-p
尽可能地保留原先文件的属性,比如mode,ownership,timestamp等
-R 递归
这样,就可以将rootfs文件全部拷贝到此块设备里面了。
然后,就可以继续我们需要的,启动时候,从/dev/lba,按照ext2方式挂载rootfs,启动系统了。