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库

制作新的根文件系统---busybox-1.20.0---(JZ2440-S3C2440)

制作新的根文件系统---busybox-1.20.0---(JZ2440-S3C2440) 1、将busybox-1.20.0.tar.bz2进行解压、编译与安装 (1)解压:tar xjf  bus...
  • liyuqian199695
  • liyuqian199695
  • 2016年12月20日 19:55
  • 641

JZ2440:busybox构建根文件系统

jz2440 的根文件系统
  • qqliyunpeng
  • qqliyunpeng
  • 2016年08月09日 15:38
  • 1362

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

后续内核执行流程: start_kernel          setup_arch      //解析u-boot传入的启动参数 setup_command_line  //解析u-boot传...
  • liuwei423210896
  • liuwei423210896
  • 2015年08月26日 09:15
  • 308

移植最新内核Linux4.1.6到TQ2440开发板教程(一)

本次移植主要是移植最新内核Linux4.1.6到TQ2440开发板 开发板:TQ2440 内核:Linux4.1.6 目的:在开发板上实现内核的启动,并挂上根文件系统 1、 下载最新内核linux-4...
  • u012246604
  • u012246604
  • 2015年08月27日 08:41
  • 1838

利用Busybox移植Yaffs2根文件系统

现在大部分开发板都可以支持yaffs2 文件系统,它是专门针对嵌入式设备,特别是使 用 nand flash作为存储器的嵌入式设备而创建的一种文件系统,早先的yaffs 仅支持小页 (512byt...
  • allen6268198
  • allen6268198
  • 2014年02月25日 19:15
  • 1079

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

jz2440开发板上实现离线根文件系统 -- yaffs2 格式。
  • qqliyunpeng
  • qqliyunpeng
  • 2016年08月19日 17:19
  • 1528

jz2440 kernel 移植(启动代码分析)

1、内核中处理器部分: ************************ 内核中要查找处理器相关,通过_lookup_processor_type函数进行查找,其中涉及到重要的结构 pr...
  • liuwei423210896
  • liuwei423210896
  • 2015年08月26日 09:13
  • 233

JZ2440:编译linux内核

将linux-3.4.112移植到jz2440开发板上。
  • qqliyunpeng
  • qqliyunpeng
  • 2016年08月09日 15:23
  • 1457

busybox移植yaffs2根文件系统

步骤:1、下载yaffs2源码(http://www.aleph1.co.uk/gitweb?p=yaffs2/.git;a=summary)2、解压       #tar xvf yaffs2-91...
  • lensens
  • lensens
  • 2011年06月21日 21:54
  • 309

移植Busybox与构建Linux根文件系统

0.简介 本文旨在为以LOONGSON-1B开发板为平台,为移植busybox、构建根文件系统提供技术文档。 开发环境:     系统环境:Loongson-1B开发板(mips32指令集)、L...
  • water_cow
  • water_cow
  • 2011年10月08日 09:34
  • 2553
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:jz2440 根文件系统 移植(yaffs2、busybox部分)
举报原因:
原因补充:

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