最新消息:20210816 当前crifan.com域名已被污染,为防止失联,请关注(页面右下角的)公众号

用busybox制作根文件系统和bootloader的参数解释【转】

工作和技术 crifan 2055浏览 0评论

用busybox制作根文件系统和bootloader的参数解释【转】

今天终于把linux下的文件系统搞定了。好高兴,困扰我几天的问题有了小小的突破,特写BLOG留念!

1,关键的是问题是要把bootloader要传递给Linux kernel的参数搞清楚,我现在使用的是:
#define DEFAULT_CMDLINE "root=/dev/mtdblock2 rootfstype=jffs2 init=/linuxrc console=ttyS0,115200 devfs=mount"
     root=/dev/mtdblock2–的意思是从mtd块设备的第三分区启动文件系统。我的系统有一个32M×32的FLASH,将它分成了几块,它们挂在dev 的名字分别是-mtdblock0 mdtblock1…。一般第一分区mtdblock0存放的是bootLoader;第二分区mtdblock1存放的是Linux kernel;第三分区mtdblock2存放的是根文件系统。
     rootfstype=jffs2–的意思是将启动文件类型设为jffs2,在这一点上我走了弯路,开始时我们买的开发版是没有这一句的,而他们所使用的cramfs是可以直接使用的,而我自己制作的jffs2文件系统却是不能使用的,在启动时总是报“Kernel panic – not syncing: VFS: Unable to mount root fs on unknown-block(31,2)”错误,最后终于在借鉴别人的命令行的基础上,加上了这句话,立即就好使了。

     init=/linuxrc 的意思是开机就去执行这个脚本程序。
     console=ttyS0,115200 的意思是控制台输出在这个第一个串口上。
     devfs=mount,这句话的意思还没有搞明白,等明白了再补上。

2,文件系统的制作--busybox
     你可以到网上找到busybox的源程序。
     首先进行设置:  

     BuildOptions—>
     InstallationOptions—>
     Login/PasswordManagementUtilities—>

    在BuildOptions里面有是否使用交叉编译的选项,因为我们的系统是要进行交叉编译的,所以必须设置些项。在InstallationOptions里面可以设置安装的路径,即设置为新文件系统的根目录。一般我给设置成“install"。在设置Login/PasswordManagementUtilities的时候,为了免去配置glibc的麻烦,最好设置使用busybox自己的password和shadow文件的功能,同时还要设置成静态的,这样生成的文件会大一些,约800K左右,但会方便很多。
    设置完毕后保存!退出,执行make;makeinstall命令,busybox将在未来的根文件系统中建立/usr /bin /sbin等目录。从中可以看到,编译好的busybox可执行文件和其他应用命令的符号链接,典型的busybox文件大小在动态链接的情况下是300KB左右,静态链接为800KB左右,用它实现的文件系统完全可以控制在1MB以下。

增加目录:
#mkdir mnt root var tmp proc boot etc
#mkdir/var/{lock,log,mail,run,spool}
改变目录属性
#chmod 755 dev etc bin mnt tmp var  
#chmod 555 proc
创建设备文件
使用cp -a命令拷贝常用的设备文件,包括console、tty1、tty2、tty3sda、sda1、sda2、hda、hdb和hda1等设备文件。

配置文件
etc文件夹是许多系统配置文件保存的地方"这些文件非常重要,如果配置错误,就可能影响系统的启动,busybox源代码example/bootfloopy/etc目录中的文件算是一个简单的例子,可以把其中的文件拷贝过来作为基础

   首先inittab文件是系统启动后所访问的第一个脚本文件,后续启动的文件都由它指定"这个文件的格式和普
通微机Linux上的inittab是有区别的,其具体含义可以参考busybox的文档"下面是一个比较简单的例子:
::sysinit:/etc/init.d/rcS
tty0::respawn:/sbin/getty38400tty0
tty2::askfirst:/bin/sh
::ctrlaltdel:/sbin/reboot
::shutdown:/bin/umountar
::shutdown:/bin/mount/oremount,ro
其中第一行指定了系统的启动脚本为/etc/init.d/rcS;第二行指定在第一个虚拟终端打开一个登录会话;第三行指定在第三个虚拟终端打开一个无须登录验证的shell;第四行指定了当按下ctrl+alt+del组合键时的执行命令;最后两行指定了关机时执行的操作。

fstab文件定义了文件系统的各个/挂接点0,需要与实际的系统相配合"一个简单的fstab文件如下:
proc     /proc    proc    defaults    0   0
/dev/hda1/ext2rw,noauto01
fstab文件从左到右:
/dev/device mount-point type rules dump fsck
1. /dev/device: 不用说了吧?例如,/dev/hda1 为M$-Win9x下的c:盘。
2. mount-point: 挂载点。例如,把/dev/hda1挂到/mnt/mywinc下。
3. type: ext3, vfat, ……就是要挂上的文件系统类型。
4. rules:
auto: 开机自动挂接;
default, noauto: 开机不自动挂接;
nouser: 只有root可挂;
ro: 只读挂接;
rw: 可读可写挂接;
user: 任何用户都可以挂接;
5. dump: 备份;0为从不备份,或显示上次至今备份之天数;
6. fsck: 启动时fsck检查顺序,0为不检查, “/”永远为1;
我的就是:

profile文件是终端登录之后首先运行的脚本,这里可以不去管它"

我们比较关心的是系统在无人登录的情况下有哪些程序要执行"从inittab文件可以看出系统启动
后要运行/etc/init.d/rcS脚本,需要启动的程序和需要进行的设置都可以写在这里面"一个可能的rcS文件如下:
#!/bin/sh
echoe’StartingSystem’
ifconfiglo127.0.0.1
ifconfigeth0192.168.0.100
hostnameF/etc/hostname
/bin/mount/oremount,rw
/bin/mount/proc
/bin/mount/dev/pts
/usr/sbin/telnetd
dmesg>/var/log/dmesg

以上完成后,就可以进行压制,jffs2.image了。
命令为:mkfs.jffs2 -o   jffs2.img -e 0x40000 -r install -p -l
其中-O表示输出文件
     -e表示FLASH擦除扇区的大小
     -p表示在映像的剩余空间填充

转载请注明:在路上 » 用busybox制作根文件系统和bootloader的参数解释【转】

发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
79 queries in 0.155 seconds, using 22.16MB memory