jz2440 根文件系统 移植(yaffs2、busybox部分)

原创 2015年08月26日 09:15:55
后续内核执行流程:
start_kernel 
        setup_arch      //解析u-boot传入的启动参数
setup_command_line  //解析u-boot传入的命令参数
rest_init
kernel_init
prepare_namespace
   mount_root    //挂接根文件系统
init_post 
   //执行应用程序
(1)重要知识点承接:
内核执行的第一个程序,是挂载根文件系统下程序,所以第一个程序是/sbin/init程序,即去解析由busyx配置好的文件,然后再去执行重要用户程序。


(2)重要的init配置格式:
inittab格式:
<id>:<runlevels>:<action>:<process>


id =>/dev/id,用作终端:stdin,stdout,stderr: print,scanf,err
<runlevels>:可以忽略
action:指定时机
process:应用程序或脚本


例如:init:ASKFIRST:


ls/cp --> busybox
那么busybox的初始化程序要完成如下工作:
init程序 :1、读取配置文件
  2、解析配置文件
  3、执行(应用程序)
其中配置文件要做的事情:1、指定程序  
2、何时执行
(3)
busybox->init_main
...
parse_inittab(busybox中文件可能缺省)
fopen = (INITTAB,"r");//打开配置文件/etc/initab
new_init_action(..)
  init_action_list //链表 
struct init_action {    
struct init_action *next;
int action;
pid_t pid;
char command[INIT_BUFFS_SIZE];
char terminal[CONSOLE_NAME_SIZE];
};
new_init_action(ASKFIRST,"-/bin/sh","/dev/tty2");
static void new_init_action(int action,const char *command,const char *cons)
执行时机          执行程序            id用作终端
1、创建一个init_action结构,填充
2、把这个结构放入链表init_action_list




源码分析:
从默认new_init_action反推出默认的配置文件:
    new_init_action(CTRLALTDEL, "reboot", "");
/* Umount all filesystems on halt/reboot */
new_init_action(SHUTDOWN, "umount -a -r", "");
/* Swapoff on halt/reboot */
if (ENABLE_SWAPONOFF) new_init_action(SHUTDOWN, "swapoff -a", "");
/* Prepare to restart init when a HUP is received */
new_init_action(RESTART, "init", "");
/* Askfirst shell on tty1-4 */
new_init_action(ASKFIRST, bb_default_login_shell, "");
new_init_action(ASKFIRST, bb_default_login_shell, VC_2);
new_init_action(ASKFIRST, bb_default_login_shell, VC_3);
new_init_action(ASKFIRST, bb_default_login_shell, VC_4);
/* sysinit */
new_init_action(SYSINIT, INIT_SCRIPT, "");
解析结果:(如果没有配置文件!!!)
<id>:<runlevels>:<action>:<process>
::CTRLALTDEL:reboot
::SHUTDOWN:umount -a -r
::RESTART::init
::askfirst:~/bin/sh
tty2::askfirst:~/bin/sh
tty3::askfirst:~/bin/sh
tty4::askfirst:~/bin/sh
::SYSINIT:INIT_SCRIPT
1、创建一个init_action结构,填充
2、把这个结构放入链表init_action_list
busybox->init_main
...
parse_inittab(busybox中文件可能缺省)
fopen = (INITTAB,"r");//打开配置文件/etc/initab
new_init_action(..)             //创建一个init_action结构,填充
  init_action_list //链表 //把这个结构放入init_action_list链表
run_actions(SYSINIT)
waitfor(a,0);       //执行应用程序,等待它执行完毕
run(a);        //创建process子进程
waitpid(runpid,&status,0)      //等待结束
delete_init_action(a); //在init_action_list链表里删除
run_actions(WAIT)
waitfor(a,0);       //执行应用程序,等待它执行完毕
run(a);        //创建process子进程
waitfor(runpid,&status,0)      //等待结束
delete_init_action(a); //在init_action_list链表里删除
run_actions(ONCE)
run(a);        //创建process子进程
delete_init_action(a); //在init_action_list链表里删除
while(1){
run_action(RESPAWN);
if(a->pid==0){
a->pid = run(a);
}
run_action(ASKFIRST);
if(a->pid==0){
a->pid = run(a)
}
wpid = wait(NULL);//等待子进程退出
while(wpid > 0)
{
a->pid = 0;//退出后,就设置pid=0
}
}
init_main只是busybox其中的一个应用程序,还有ls_main


总结最小的根文件系统所必须的:
|-1、/dev/console  /dev/null 
| 2、init => busybox
| 3、/etc/inittab
| 4、配置文件指定的程序
|-5、C库

相关文章推荐

JZ2440:yaffs2 格式根文件系统制作

jz2440开发板上实现离线根文件系统 -- yaffs2 格式。

第二部分 s3c2440 移植linux内核 添加网卡支持 yaffs2文件系统支持

三、内核的移植 1、移植内核 首先,下载源码包:https://www.kernel.org/ 现在时间为2014年12月20日其主界面截图为: 在此,就在下较新的稳定的版本作为尝试。在这里有个...

利用busybox制作yaffs2 根文件系统镜像

编译busybox需要用arm-linux-gcc3.XX 编译器,用 arm-unknown-linx-gnueabi-gcc会出问题。1.从htt...

移植u-boot-2011.03到S3C2440(utu2440)的方法与步骤###8. u-boot引导启动nand flash中内核和根文件系统cramfs和用户文件系统yaffs2支持

作者:reille本博客网址:http://blog.csdn.net/reille/开发环境:主机:Window XP SP2;linux:VMware7.01+ubuntu9.10;目标板:扬创u...
  • reille
  • reille
  • 2011年07月09日 21:59
  • 13451

Linux-2.6.32.2内核在mini2440上的移植----用busybox制作根文件系统

1、交叉编译Busybox (1)、解压 busybox clx@think:/work$ tar -jxvf busybox-1.20.0.tar.bz2 -C /work/armlinux (2...

基于busybox1.19.3移植yaffs2文件系统至OK6410A开发板

一、下载busybox http://busybox.net/downloads/busybox-1.19.3.tar.bz2   二、解压busybox源码,修改Makefile # tar...
  • caoyhok
  • caoyhok
  • 2011年12月16日 12:28
  • 686

移植Linux根文件系统之yaffs2

1. 这里我的文档yaffs2和linux3.4.2在同一个文件下,假设在这个两个文件夹上一级,如下就是使用的脚本命令: cd yaffs2 ./patch-ker.sh c m ../linux...
  • comwise
  • comwise
  • 2013年12月10日 22:57
  • 958

最小yaffs2文件系统移植(目标板TQ2440)

转自:http://blog.sina.com.cn/s/blog_95268f5001013m6d.html 首先说一下最小文件系统需要的文件 (1)/dev/null   /dev/conso...

TX2440 ARM开发板Uboot移植(五、yaffs2文件系统的支持)

Yaffs/yaffs2文件系统的设计充分考虑到Nand Flash以页为存取单位等的特点,将文件组织成固定大小的段(Chunk)。以528B的页为例,Yaffs/yaffs2文件系统使用前512B存...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:jz2440 根文件系统 移植(yaffs2、busybox部分)
举报原因:
原因补充:

(最多只允许输入30个字)