如何构建根文件系统 2016.6.3
1.内核怎样启动第一个应用程序
a.打开了第一个设备
run_init_process(execute_command)要么是命令行里指定的
run_init_process("/sbin/init")
ps查看当前正在跑的程序
init程序:
a.读取配置文件
b.解析配置文件
c.执行用户程序
ls -l bin cp
busybox->init_main
parse_inittab(解析init表)
file = fopen(打开配置文件etc/inittab)
inittab格式:
<id>:<runlevels>:<action>:<process>
runlevels : 忽略
action :执行时机
process :应用程序和脚本
id => /dev/id,用做终端 : stdin,stdout,stderr,printf,scanf,err
new_init_action
new_init_action(ASKFIRST, bb_default_login_shell, VC_2);
new_init_action(ASKFIRST, -/bin/sh, /dev/tty2);
static void new_init_action(int action, const char *command, const char *cons)
①创建一个init_action结构,填充
②把这个结构放入init_action_list
run_actions执行动作
一个根文件系统需要的项
/dev/console
/dev/null
/etc/inittab配置文件
配置文件里指定的应用程序
库(fopen())
init本身,即busybox
编译时遇到
/work/tools/usr/local/arm/4.3.2/bin/../arm-none-linux-gnueabi/libc/usr/include/linux/netfilter.h:44:
error: field 'in' has incomplete type
解决办法:
修改arm-linux交叉编译工具链
在usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/usr/include/linux/netfilter.h
头文件的开头添加缺少的头文件:#include<netinet/in.h>
构建最小根文件系统
mount -a挂在根文件系统
NFS挂载
手工挂接
配置网卡:
ifconfig eth0 up创建网卡
直接从NFS启动
set bootargs noinitrd root=/dev/nfs nfsroot=10.1.4.27:/work/nfs_root/sec_fs ip=10.1.4.26:10.1.4.27:10.1.4.254:255.255.255.0::eth0:off init=/linuxrc console=ttySAC0
save
make install # or make CONFIG_PREFIX=/path/from/root install安装busbox
1.内核怎样启动第一个应用程序
a.打开了第一个设备
run_init_process(execute_command)要么是命令行里指定的
run_init_process("/sbin/init")
ps查看当前正在跑的程序
init程序:
a.读取配置文件
b.解析配置文件
c.执行用户程序
ls -l bin cp
busybox->init_main
parse_inittab(解析init表)
file = fopen(打开配置文件etc/inittab)
inittab格式:
<id>:<runlevels>:<action>:<process>
runlevels : 忽略
action :执行时机
process :应用程序和脚本
id => /dev/id,用做终端 : stdin,stdout,stderr,printf,scanf,err
new_init_action
new_init_action(ASKFIRST, bb_default_login_shell, VC_2);
new_init_action(ASKFIRST, -/bin/sh, /dev/tty2);
static void new_init_action(int action, const char *command, const char *cons)
①创建一个init_action结构,填充
②把这个结构放入init_action_list
run_actions执行动作
一个根文件系统需要的项
/dev/console
/dev/null
/etc/inittab配置文件
配置文件里指定的应用程序
库(fopen())
init本身,即busybox
编译时遇到
/work/tools/usr/local/arm/4.3.2/bin/../arm-none-linux-gnueabi/libc/usr/include/linux/netfilter.h:44:
error: field 'in' has incomplete type
解决办法:
修改arm-linux交叉编译工具链
在usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/usr/include/linux/netfilter.h
头文件的开头添加缺少的头文件:#include<netinet/in.h>
构建最小根文件系统
mount -a挂在根文件系统
NFS挂载
手工挂接
配置网卡:
ifconfig eth0 up创建网卡
直接从NFS启动
set bootargs noinitrd root=/dev/nfs nfsroot=10.1.4.27:/work/nfs_root/sec_fs ip=10.1.4.26:10.1.4.27:10.1.4.254:255.255.255.0::eth0:off init=/linuxrc console=ttySAC0
save
make install # or make CONFIG_PREFIX=/path/from/root install安装busbox