构造根文件系统之启动第一个程序

本文详细介绍了从U-Boot启动内核直至运行第一个应用程序的过程。解释了如何通过打开/dev/console来设置标准输入输出,并展示了内核如何尝试运行不同的初始化程序,如/sbin/init等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

uboot的目的->启动内核,内核的目的->启动应用程序。

那这些应用程序位于哪里呢?

答案是位于根文件系统上面,所以需要先挂接根文件系统。

于是我们需要构建根文件系统。

内核怎么启动第一个应用程序的呢?

1.打开一个设备sys_open((const char __user *) "/dev/console", O_RDWR, 0)

(void) sys_dup(0);//dup是复制的意思
(void) sys_dup(0);

我们的程序有scanf、printf、stderr ,标准输入、标准输出、标准错误。

上面代码的意思是打开console这个文件,输入的时候是从这个文件输入,输出也是。console文件对应于终端dev/console在我这里对应的是串口0。

2.

//execute_command为命令行传入的。

if (execute_command)  

 {
    run_init_process(execute_command);
    printk(KERN_WARNING "Failed to execute %s.  Attempting "
    "defaults...\n", execute_command);
}

run_init_process("/sbin/init");
run_init_process("/etc/init");
run_init_process("/bin/init");
run_init_process("/bin/sh");

run_init_process()的参数为命令行传入的init=xxx,或者是/sbin/init、/etc/init等等。

我们启动开发板后ps可以看到启动的程序。




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值