接下来继续分析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失败,如下图: ?
Try passing init= optionto kernel 它说得很明显, Failed to execute /linuxrc ──执行/linuxrc失败: 它为什么要执行/linuxrc...原因有二: 一、制作文件系统映象时,rootfs目录下有linuxrc文件吗? 二、rootfs目录的linuxrc文件是正确的吗?...请好好确定这两点,大多数是没有linuxrc文件──linuxrc是busybox自动生成,只要配置好就可以。如果有linuxrc,还出现问题,原因就是它无法执行了(解决方法在下面)。...不用linuxrc行不行?当然行!...使用busybox时,linuxrc是/bin/busybox文件的软链接,那就看看busybox的文件类型,可以使用 $ file linuxrc linuxrc: symbolic link
一、/linuxrc 1. /linuxrc是一个可执行的应用程序 (1)/linuxrc是应用层的,和内核源码一点关系都没有。 (2)/linuxrc在开发板当前系统下是可执行的。...(3)/linuxrc如果是静态编译链接的,那么可以直接运行;如果是动态编译链接的,那么还必须给它提供必要的库文件才能运行。...但是由于/linuxrc是由内核直接调用执行的,因此在这里没有机会导出库文件的路径,所以这个/linuxrc没法动态链接,一般都是静态链接的。 2....(2)用户界面等很多事并不是在/linuxrc中负责的,用户界面有自己专门的应用程序,但是用户界面的应用程序是直接或间接的被/linuxrc调用执行的。.../linuxrc在嵌入式linux中一般就是busybox (1)busybox是一个C语言写出来的项目,里面包含很多的.c和.h文件。这个项目可以被配置编译成各个平台下可以运行的应用程序。
前言 根文件系统是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
/rootfs/ 我们向镜像中写入一个普通文件linuxrc。这个文件就会成为我们制作的镜像中的/linuxrc。内核挂载了这个镜像后就会尝试去执行/linuxrc。然后执行时必然会失败。.../linuxrc如果是静态编译连接的那么直接可以运行;如果是动态编译连接的那么我们还必须给他提供必要的库文件才能运行。...但是因为我们 /linuxrc 这个程序是由内核直接调用执行的,因此用户没有机会去导出库文件的路径,因此实际上这个 /linuxrc 没法动态连接,一般都是静态连接的。.../linuxrc在嵌入式linux中一般就是busybox busybox 是一个 C 语言写出来的项目,里面包含了很多 .c 文件和 .h 文件。...设置 bootargs 挂载添加了busybox移植的rootfs 之前建立了一个空的文件夹然后自己 touch linuxrc 随便创建了一个不能用的 /linuxrc 然后去 nfs 挂载 rootfs
如果想做一个极简的文件系统,可以使用Busybox手工制作。...soft/software/busybox-1.34.0$ cd _install/ zh@zh-lpc:~/soft/software/busybox-1.34.0/_install$ ls bin linuxrc...linux_tools/rootfs$ pwd /home/zh/soft/linux_tools/rootfs zh@zh-lpc:~/soft/linux_tools/rootfs$ ls bin linuxrc...rootfs/lib目录下 3-1:创建lib目录 zh@zh-lpc:~/soft/linux_tools/rootfs$ ls bin linuxrc sbin usr zh@zh-lpc:~...@zh-lpc:~/soft/linux_tools/rootfs$ zh@zh-lpc:~/soft/linux_tools/rootfs$ ls bin dev lib linuxrc sbin
,默认为yaffs2文件系统,如果是jffs2文件系统,添加 rootfstype=jffs2 // yaffs2 setenv bootargs noinitrd root=/dev/mtdblock3...init=/linuxrc console=ttySAC0,115200 // jffs2 setenv bootargs noinitrd root=/dev/mtdblock3 init=/linuxrc...:/work/nfs_root/xxxx // 使用nfs网络文件系统启动,默认为yaffs2文件系统,如果是jffs2文件系统,添加rootfstype=jffs2 // yaffs2 ,注意是一行...192.168.1.2:/work/nfs_root/xxxx ip=192.168.1.3:192.168.1.2:192.168.1.1:255.255.255.0::eth0:off init=/linuxrc...192.168.1.2:/work/nfs_root/xxxx ip=192.168.1.3:192.168.1.2:192.168.1.1:255.255.255.0::eth0:off init=/linuxrc
编译根文件系统需要的基本文件 [wbyq@wbyq ~]$ mkdir ~/work/busybox -p [wbyq@wbyq ~]$ tar xvf busybox-1.23.2.tar.bz2 -...挂载文件系统 挂载文件系统分为两种: 本地挂载. 产品发布使用这种. 将文件系统放在SD卡或者EMMC上 网络挂载(NFS). 产品开发阶段使用这种....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...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
的可执行文件,不是静态链接的, 可以用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)。
在上一节分析出制作一个最小的根文件系统至少需要: (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做好后,下一节就开始构建根文件系统
在制作Initramfs文件系统之前,我先简单介绍下linux各文件系统。...,最好全部拷贝,毕竟以后程序运行还有可能用到 接下来开始制作Initramfs文件系统: 1、建立Initramfs文件系统启动时所需文件init(initramfs文件系统启动时会在根文件系统中执行第一个...init程序,它对uboot传过来的参数init=/linuxrc不予理睬,所以需要在制作的根文件系统里的根目录加入init程序,否则无法启动。...init程序和linuxrc程序一样都是符号链接文件,它们都是指向/bin/busybox程序。)...cd rootfs mv linuxrc init 2、添加内核对Initramfs文件系统支持 make menuconfig General setup —>
在宿主机的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、配置网络部分
利用alphine:3.8 image作为baseimage, B. copyregistry 文件到/bin/目录下 C. copy config.yml 文件到/etc/docker/registry.../bin/registry' -> '/mnt/bin/registry' / # exit [root@localhost docker_study]# ls bin busybox etc linuxrc...help|-*) set -- registry "$@" ;; esac exec "$@" [root@localhost docker_study]# ls bin busybox etc linuxrc...docker_study]#tar -czvf registry_Busybox-Based.tar.gz * [root@localhost docker_study]# ls bin busybox etc linuxrc...[root@localhost docker_study]# ls bin linuxrc registry_Busybox-Based.tar.gz sbin busybox etc
//保存memory_tag数据,让内核知道内存多大 setup_commandline_tag (“boottargs=noinitrd root=/dev/mtdblock3 init=/linuxrc...console=ttySAC0”); /*保存命令行bootargs参数,让内核知道根文件系统位置在/dev/mtdblock3,指定开机运行第一个脚本/linuxrc,指定打印串口0*/ setup_end_tag...*/ /*一般为:“boottargs=noinitrd root=/dev/mtdblock3 init=/linuxrc...//定义objs变量,包含生成boot.bin目标文件需要的依赖文件 boot.bin: $(objs) //执行生成目标文件,首先是先满足objs所有依赖文件都拥有...生成xxx.o文件先要找到xxx.c文件 ${CC} $(CPPFLAGS) $(CFLAGS) -c -o $@ $< //-c编译不连接。
它提供一个grub for dos安装程序; 解压后copy到c:/boot/grub/ 目录下, 并copy menu.lst 和chinese目录中的文件grldr文件到C:/....二、将bt的iso文件解压开,并复制boot目录下的所有文件到c:/boot/目录下. 记住BT3的目录,需要写入menu.lst中去....三、编辑boot.ini文件如下: 首先修改boot.ini的属性, 然后再最后添加下面这句; C:/grldr=Start Grub 四、修改menu.lst 添加 title start BackTrack3...find –set-root /boot/vmlinuz # BT3放在C:/目录下 #kernel /boot/vmlinuz max_loop=255 init=linuxrc livecd_subdir...ramdisk_size=262144 root=/dev/ram0 rw # BT3放在D:/BT3B141027/目录下 kernel /boot/vmlinuz max_loop=255 init=linuxrc
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
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
tar.bz2 cd busybox-2.23/ 第三步:配置,编译,安装busybox 我安装的交叉编译链为: aarch64-Linux-gnu- 配置: 生成默认arm版配置文件....config: make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- defconfig 通过图形界面修改配置文件.config...menuconfig 在编译选项中,一般选择静态方式 编译: 编译:make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- 安装(其实就是把生成的文件汇聚到一起...(默认是在当前目录_install文件夹中): make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- install 在_install 文件下有...: sbin bin usr linuxrc 不指定ARCH等参数,则编译x86版。
- 打开/关闭eMMC引导分区 env - 环境处理命令 exit - 退出脚本 ext2format- ext2 ext2format——磁盘格式 ext2load- 从Ext2文件系统加载二进制文件...—从dos加载二进制文件的文件系统 fatls - 一个目录列表文件(默认/) fdisk - fdisk for sd/mmc....console=ttySAC0,115200 root参数用来指定根文件系统挂载的位置。...init 是指定挂载文件系统之后运行的脚本,用来做一些系统初始化。...user: 用户分区, 一般是操作内核,文件系统的 mmc 扇区范围。
领取专属 10元无门槛券
手把手带您无忧上云