首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

第4阶段——制作根文件系统之分析init_post()如何启动第1个程序(1)

接下来继续分析init_post(): /*调用dup打开/dev/console文件描述符两次, 该控制台设备就也可以供标准输出和标准错误使用(文件描述符1和2),kernel_init进程现在就拥有...3个文件描述符--标准输入、标准输出以及标准错误。...__setup都是一样的 显然这里就是用来匹配命令行中以” init=”开头的字符串,然后再将命令行参数bootargs中的” init=/linuxrc”中的” /linuxrc”放在execute_command...(init=/linuxrc:指定内核启动后运行的第一个脚本是当前目录下linuxrc脚本)      最终__setup("init=", init_setup)宏= { __setup_str_ root_dev_setup...当文件系统被擦除后,就会运行linuxrc应用程序失败,打印执行linuxrc失败,如下图: ?

1.5K80
您找到你想要的搜索结果了吗?
是的
没有找到

rootfs文件系统_bootfs和rootfs

一、/linuxrc 1. /linuxrc是一个可执行的应用程序 (1)/linuxrc是应用层的,和内核源码一点关系都没有。 (2)/linuxrc在开发板当前系统下是可执行的。...(3)/linuxrc如果是静态编译链接的,那么可以直接运行;如果是动态编译链接的,那么还必须给它提供必要的库文件才能运行。...但是由于/linuxrc是由内核直接调用执行的,因此在这里没有机会导出库文件的路径,所以这个/linuxrc没法动态链接,一般都是静态链接的。 2....(2)用户界面等很多事并不是在/linuxrc中负责的,用户界面有自己专门的应用程序,但是用户界面的应用程序是直接或间接的被/linuxrc调用执行的。.../linuxrc在嵌入式linux中一般就是busybox (1)busybox是一个C语言写出来的项目,里面包含很多的.c和.h文件。这个项目可以被配置编译成各个平台下可以运行的应用程序。

1.1K10

嵌入式Linux开发-根文件系统NFS网络挂载

前言 根文件系统是Linux内核启动之后挂载的第一个文件系统,上篇文章里已经介绍过,如何使用busybox来制作根文件系统。...这篇文章介绍根文件系统制作成功后,如何让内核找到文件系统,并完成挂载,进入到系统命令行终端。...根文件系统支持从网络挂载和本地挂载两种方式: (1)如果是采用网络挂载就将路径设置为/dev/nfs,NFS是Linux下常用的网络文件系统,这种方式挂载一般是在系统开发阶段,方便修改调试代码,也就是将根文件系统放在...192.168.10.11:/home/wbyq/work/rootfs ip=192.168.10.123:192.168.10.11:192.168.10.1:255.255.255.0::eth0:off init=/linuxrc...bootargs root=/dev/nfs nfsroot=: ip=:::255.255.255.0::eth0:off init=/linuxrc

3.9K30

嵌入式 linux 根文件系统原理和制作方法

/rootfs/ 我们向镜像中写入一个普通文件linuxrc。这个文件就会成为我们制作的镜像中的/linuxrc。内核挂载了这个镜像后就会尝试去执行/linuxrc。然后执行时必然会失败。.../linuxrc如果是静态编译连接的那么直接可以运行;如果是动态编译连接的那么我们还必须给他提供必要的库文件才能运行。...但是因为我们 /linuxrc 这个程序是由内核直接调用执行的,因此用户没有机会去导出库文件的路径,因此实际上这个 /linuxrc 没法动态连接,一般都是静态连接的。.../linuxrc在嵌入式linux中一般就是busybox busybox 是一个 C 语言写出来的项目,里面包含了很多 .c 文件和 .h 文件。...设置 bootargs 挂载添加了busybox移植的rootfs 之前建立了一个空的文件夹然后自己 touch linuxrc 随便创建了一个不能用的 /linuxrc 然后去 nfs 挂载 rootfs

3.7K31

busybox rootfs 与 ubuntu rootfs_boot.img root

的可执行文件,不是静态链接的, 可以用readelf -d命令查看busybox依赖的库,所以需要把刚才用的交叉编译comipler的lib文件,都copy到rootfs的lib目录下。...(这里要删除*.a *.la *.o等文件,只保留*.so文件) mkdir rootfs/lib cp -rf /toolchain/arm-linux-gnu-eabi/lib/libc...同样的, libc/usr/lib/下面的库文件,也需要复制到rootfs下面。这里要删除*.a *.la *.o等文件,只保留*.so文件。 同时也用strip命令裁剪库文件。...kernel挂载rootfs为根目录,替换掉系统刚刚启动时创建的临时的vfs,并开始运行第一个程序,该程序默认存放在rootfs根目录下,名字是linuxrc或者是init(如果bootargs设置了init...=/linuxrc就允许linuxrc)。

78610

第4阶段——制作根文件系统之编译配置安装busybox(3)

在上一节分析出制作一个最小的根文件系统至少需要: (1)/dev/console(终端控制台, 提供标准输入、标准输出以及标准错误) /dev/null  (为空的话就是/dev/null, 所有写到这个文件中的数据都会被丢弃掉...得出: make menuconfig             //通过配置菜单配置.config文件 make                        //编译busybox可执行文件 make...3.5 支持mdev(并支持medv.conf和热拔插),选择mount/umount命令(并支持NFS文件系统) ? 3.6 选择ifconfig命令 ?...从上图看出共有3个目录和1个linuxrc文件,其中 bin包含用户工具,包括了大部分命令,该子目录下所有文件指向busybox sbin目录包含操作系统工具,同样也指向busybox。...linuxrc是一个链接文件,指向busybox。 busybox做好后,下一节就开始构建根文件系统

1.5K50

nfs方式启动rootfs配置过程

在宿主机的nfs服务器中导出文件夹形式的rootfs目录,在客户端中去挂载这个文件夹形式的rootfs进而去启动系统。...192.168.1.141:/work/rootfs/rootfs ip=192.168.1.10:192.168.1.141:192.168.1.1:255.255.255.0::eth0:off init=/linuxrc...nfsroot=: 参数nfsroot这个参数告诉内核以哪一台机器的哪个目录以及哪个网络文件系统选项作为根文件系统使用。... 指定网络文件系统服务端的IP地址。如果没有指定定,则使用nfsaddrs变量指定的值。 服务端上要作为根文件系统要挂载的目录名称。...init=/linuxrc 指定初始化文件 console=ttySAC2,115200 控制台选择 步骤2:设置内核支持nfs启动rootfs 在menuconfig中配置以下选项: 1、配置网络部分

1.6K30

第4阶段——制作根文件系统之编译配置安装busybox(3)

在上一节分析出制作一个最小的根文件系统至少需要: (1)/dev/console(终端控制台, 提供标准输入、标准输出以及标准错误) /dev/null  (为空的话就是/dev/null, 所有写到这个文件中的数据都会被丢弃掉...得出: make menuconfig             //通过配置菜单配置.config文件 make                        //编译busybox可执行文件 make...3.5 支持mdev(并支持medv.conf和热拔插),选择mount/umount命令(并支持NFS文件系统) ? 3.6 选择ifconfig命令 ?...从上图看出共有3个目录和1个linuxrc文件,其中 bin包含用户工具,包括了大部分命令,该子目录下所有文件指向busybox sbin目录包含操作系统工具,同样也指向busybox。...linuxrc是一个链接文件,指向busybox。 busybox做好后,下一节就开始构建根文件系统

1.2K70

移植busybox构建最小根文件系统的步骤详解

cd /home/rootfs #mkdir dev etc lib usr var proc tmp home root mnt sys STEP 2: 使用busybox构建/bin /sbin linuxrc...busybox的shell命令解释器支持显示当前路径及主机信息 保存退出 #make #make install 在busybox目录下会看见 _install目录,里面有/bin /sbin linuxrc...三个文件将这三个目录或文件拷到第一步所建的rootfs文件夹下。...#cp bin/ sbin/ linuxrc /home/rootfs -ra 切记一定要带上-a的参数,因为bin目录里大部分都是链接,如果不带-a的参数,拷过去之后会做相应的复制,不再是链接的形式...STEP 3 构建etc目录:(主要有etc/inittab文件 、etc/init.d/rcs、etc/fstab) 1)进入根文件系统rootfs的etc目录,执行如下操作: 拷贝Busybox-1.16.1

3.2K30

使用 qemu 运行 linux 5.17

image.png 先选中Settings,然后回车走进去,找到 Build static binary(no shard libs),然后选中,再一路exit退出 image.png 这样继续编译生成根文件系统.../out install 继续制作根文件系统: cd out/_install mkdir -pv {bin,dev,d,sbin,etc/init.d,mnt,proc,sys,usr/{bin,sbin...},tmp} sudo mknod dev/null c 1 3 sudo mknod dev/console c 5 1 我们知道linux的第一个进程是init,那么根文件系统中也需要一个init...,直接将linuxrc 重命名成init 就好了 mv linuxrc init 继续制作设备挂载: cd out/_install 新建fstab文件,vim fstab, 写入如下内容: proc.../out defconfig # 配置根文件系统 touch out/out.config 将下面内容写到该文件中: CONFIG_INITRAMFS_SOURCE="your busybox dir

1.9K30
领券