制作嵌入式根文件系统常见问题详解
止时必须重新启动的inittab命令(动作类型:once) 2. 执行所有终止时必须重新启动但启动前必须询问用户的inittab命令(动作类型:askfirst) 初始化控制台之后,BusyBox会检查/etc/inittab文件是否存在,如果此文件不存在,BusyBox会使用缺省的inittab配置,它主要为系统重引导,系统挂起以及init重启动设置缺省的动作,此外它还会为四个虚拟控制台(tty1到tty4)设置启动shell的动作。如果未建立这些设备文件,BusyBox会报错。 inittab文件中每一行的格式如下所示:(busybox的根目录下的example文件夹下有详尽的inittab文件范例) id:runlevel:action:process 尽管此格式与传统的Sytem V init类似,但是,id在BusyBox的init中具有不同的意义。对BusyBox而言,id用来指定启动进程的控制tty。如果所启动的进程并不是可以交互的shell,例如BusyBox的sh(ash),应该会有个控制tty,如果控制tty不存在,Busybox的sh会报错。BusyBox将会完全忽略runlevel字段,所以空着它就行了,你也许会问既然没用保留着它干吗,我想大概是为了和传统的Sytem V init保持一致的格式吧。process字段用来指定所执行程式的路径,包括命令行选项。action字段用来指定下面表中8个可应用到process的动作之一。 sysinit: 为init提供初始化命令行的路径 respawn: 每当相应的进程终止执行便会重新启动 askfirst: 类似respawn,不过它的主要用途是减少系统上执行的终端应用程序的数量。它将会促使init在控制台上显示“Please press Enter to active this console”的信息,并在重新启动之前等待用户按下enter键 wait: 告诉init必须等到相应的进程完成之后才能继续执行 once:仅执行相应的进程一次,而且不会等待它完成 ctratldel: 当按下Ctrl+Alt+Delete组合键时,执行相应的进程 shutdown: 当系统关机时,执行相应的进程 restart: 当init重新启动时,执行相应的进程,通常此处所执行的进程就是init本身 以下是我的usblinux的inittab文件 ::sysinit:/etc/init.d/rcS ::respawn:/sbin/getty 115200 tty1 tty2::askfirst:-/bin/sh tty3::askfirst:-/bin/sh ::restart:/sbin/init ::ctrlaltdel:/bin/umount -a -r 这个inittab执行下列动作 1. 将/etc/init.d/rcS设置成系统的初始化文件 2. 在115200 bps的虚拟终端tty1上启动一个登陆会话 (注意getty的用法) 3. 在虚拟终端tty2和tty3上启动askfirst动作的shell 4. 如果init重新启动,将/sbin/init设置成它会执行的程序 5. 告诉init,在系统关机的时候执行umount命令卸载所有文件系统,并且在卸载失败时用只读模式冲新安装以保护文件系统。 1、busybox的inittab与pc使用的inittab不同,第一ID并不是随便取名字的,这个名字要与/dev/目录下是否有对应的文件对应 对应错误 can't open /dev/0: No such file or directory process '-/bin/sh' (pid 789) exited. Scheduling for restart. can't open /dev/0: No such file or directory process '-/bin/sh' (pid 793) exited. Scheduling for restart. 2、出现下面这种错误: process '-/bin/sh' (pid 789) exited. Scheduling for restart. process '-/bin/sh' (pid 794) exited. Scheduling for restart. process '-/bin/sh' (pid 796) exited. Scheduling for restart. process '-/bin/sh' (pid 798) exited. Scheduling for restart. 对应的inittab文件中有 ttyS0::askfirst:-/bin/sh 虽然在/dev/目录下有ttyS0设备,但是这个设备显然不可用,所以才会出现上面的错误 3、当在inittab中同时定义的两个在同一个串口终端登陆的语句时 ::askfirst:-/bin/sh s3c2410_serial0:23456:respawn:/sbin/getty -L s3c2410_serial0 115200 vt100 出现的情况就是被抢占,不能接收任何串口输入 4、bad inittab entry 多半时因为非法字符造成的。 [next] 5、busybox中的字段runleve也没有运行时的运行级别的概念 6、分析一下启动的过程 1. 为init设置信号处理过程 2. 初始化控制台 3. 剖析/etc/inittab文件 4. 执行系统初始化命令行,缺省情况下会使用/etc/init.d/rcS 5. 执行所有导致init暂停的inittab命令(动作类型:wait) 6. 执行所有仅执行一次的inittab(动作类型:once) 一旦完成以上工作,init进程便会循环执行以下进程: 1. 执行所有终止时必须重新启动的inittab命令(动作类型:once) 2. 执行所有终止时必须重新启动但启动前必须询问用户的inittab命令(动作类型:askfirst) 初始化控制台之后,BusyBox会检
- Windows CE 进程、线程和内存管理(11-09)
- 如何监控和保护Linux下进程安全 (07-12)
- uClinux进程调度器的实现分析(04-13)
- linux操作系统下的进程通信设计(01-24)
- Windows操作系统多核CPU内核线程管理方法(01-21)
- 一种基于嵌入式实时操作系统的微机保护装置网络通信方案(05-07)