linux的进程1:rootfs与linuxrc

2023-11-09

在内核启动的最后阶段启动了三个进程

进程0:进程0其实就是刚才讲过的idle进程,叫空闲进程,也就是死循环。
进程1:kernel_init函数就是进程1,这个进程被称为init进程。
进程2:kthreadd函数就是进程2,这个进程是linux内核的守护进程。这个进程是用来保证linux内核自己本身能正常工作的

在嵌入式操作系统中一般会指定/linuxrc为init进程。

1、/linuxrc是一个可执行的应用程序
(1)/linuxrc是应用层的,和内核源码一点关系都没有
(2)/linuxrc在开发板当前内核系统下是可执行的。因此在ARM SoC的linux系统下,这个应用程序就是用arm-linux-gcc编译链接的;如果是在PC机linux系统下,那么这个程序就是用gcc编译连接的。
(3)/linuxrc如果是静态编译连接的那么直接可以运行;如果是动态编译连接的那么我们还必须给他提供必要的库文件才能运行。但是因为我们/linuxrc这个程序是由内核直接调用执行的,因此用户没有机会去导出库文件的路径,因此实际上这个/linuxrc没法动态连接,一般都是静态连接的。

2、/linuxrc执行时引出用户界面
(1)操作系统启动后在一系列的自己运行配置之后,最终会给用户一个操作界面(也许是cmdline,也许是GUI),这个用户操作界面就是由/linuxrc带出来的。
(2)用户界面等很多事并不是在/linuxrc程序中负责的,用户界面有自己专门的应用程序,但是用户界面的应用程序是直接或者间接的被/linuxrc调用执行的。用户界面程序和其他的应用程序就是进程2、3、4·····,这就是我们说的进程1(init进程,也就是/linuxrc)是其他所有应用程序进程的祖宗进程。

3、/linuxrc负责系统启动后的配置
(1)就好像一个房子建好之后不能直接住,还要装修一样;操作系统启动起来后也不能直接用,要配置下。
(2)操作系统启动后的应用层的配置(一般叫运行时配置,英文简写etc)是为了让我们的操作系统用起来更方便,更适合我个人的爱好或者实用性。

4、/linuxrc在嵌入式linux中一般就是busybox
(1)busybox是一个C语言写出来的项目,里面包含了很多.c文件和.h文件。这个项目可以被配置编译成各个平台下面可以运行的应用程序。我们如果用arm-linux-gcc来编译busybox就会得到一个可以在我们开发板linux内核上运行的应用程序。
(2)busybox这个程序开发出来就是为了在嵌入式环境下构建rootfs使用的,也就是说他就是专门开发的init进程应用程序。
(3)busybox为当前系统提供了一整套的shell命令程序集。譬如vi、cd、mkdir、ls等。在桌面版的linux发行版(譬如ubuntu、redhat、centOS等)中vi、cd、ls等都是一个一个的单独的应用程序。但是在嵌入式linux中,为了省事我们把vi、cd等所有常用的shell命令集合到一起构成了一个shell命令包,起名叫busybox。

 

 

根目录rootfs中还应该有什么

1、最重要的就是上节课讲过的/linuxrc
2、dev目录下的设备文件。在linux中一切皆是文件,因此一个硬件设备也被虚拟化成一个设备文件来访问,在linux系统中/dev/xxx就表示一个硬件设备,我们要操作这个硬件时就是open打开这个设备文件,然后read/write/ioctl操作这个设备,最后close关闭这个设备。
在最小rootfs中/dev目录也是不可少的,这里面有一两个设备文件是rootfs必须的。
3、sys和proc目录。在最小rootfs中也是不可省略的,但是这两个只要创建了空文件夹即可,里面是没东西的,也不用有东西。这两个目录也是和驱动有关的。属于linux中的虚拟文件系统。
4、usr是系统的用户所有的一些文件的存放地,这个东西将来busybox安装时会自动生成。
5、etc目录是很关键很重要的一个,目录中的所有文件全部都是运行时配置文件。/etc目录下的所有配置文件会直接或者间接的被/linuxrc所调用执行,完成操作系统的运行时配置。etc目录是制作rootfs的关键,所以后面下一个课程专门讲这个etc目录。
6、lib目录也是rootfs中很关键的一个,不能省略的一个。lib目录下放的是当前操作系统中的动态和静态链接库文件。我们主要是为了其中的动态链接库。

VFS简介:一切皆是文件

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

linux的进程1:rootfs与linuxrc 的相关文章

  • [Uboot] 添加自己配置文件defconfig以及头文件

    一 添加配置文件 1 拷贝 uboot configs下自己单板的配置文件 拷贝并且重命名 cp mx6ull 14x14 evk emmc defconfig my imx defconfig 2 配置configs 很多情况下我们都是默
  • ARM上电启动及Uboot代码分析

    注意 xff1a 由于文档是去年写的 xff0c 内有多个图片 xff0c 上传图片很麻烦 xff08 需要截图另存插入等等 xff09 xff0c 我把文章的PDF版本上传到了CSDN下载资源中 为了给自己赚点积分 xff0c 所以标价2
  • 【教程】保姆级红米AX6000刷UBoot和OpenWrt固件

    转载请注明出处 xff1a 小锋学长生活大爆炸 xfxuezhang cn 目录 开启SSH 刷入UBoot 刷入Openwrt 设置Openwrt 刷回小米原厂固件 相关文件已为大家上传到国内云盘 xff1a https xfxuezha
  • U-boot引导流程分析一

    U Boot 全称 Universal Boot Loader 即通用引导程序 是遵循GPL条款的开放源码项目 它的源码目录 编译形式与Linux内核很相似 事实上 不少U Boot源码就是相应的Linux内核源程序的简化 尤其是一些设备的
  • imx6ul:uboot-2013.10启动过程解析

    1 源码结构分析 首先一个问题 老版本的u boot是没有SPL这个文件的 新版u boot开始包含SPL文件 原来u boot启动比如放到nand中 在cpu内部有一个stepping stone 可以拷贝nand中的u boot到ram
  • U-Boot常用命令

    U Boot常用命令 一 信息查询命令 1 查看开发板信息 bdinfo 2 查看环境变量信息 printenv 3 查看U Boot版本号 version 二 环境变量操作命令 1 修改环境变量 setenv 2 保存环境变量 savee
  • 三星S5P6818之UBOOT网络配置

    三星S5P6818之UBOOT网络配置 使用友善提供的固件烧写到SD卡发现UBOOT并不能联网 于是研究了UBOOT源码 并调通了网络 以下步骤亲测可用 前言 这个适合友善nanopi3系列的开发板 M3 Fire3 T3等 或者其他使用
  • uboot环境变量分析

    项目情景 最近我在一个新平台的开发过程中遇到烧录问题 具体的问题是使用原厂提供的烧录脚本烧录成功 但是固件却没有更新 其中kernel和dtb烧录指令如下 adnl exe Partition M mem P 0x1000000 F lin
  • uboot中printf( )函数实现分析

    1 前言 这部分涉及uboot中串口的初始化 参考博客 uboot中串口 控制台 初始化详解 2 printf 函数实现思路分析 1 uboot中的printf 函数的用法和利用C库编写C语言程序时是一样的 本身uboot中printf 函
  • 03_uboot的源码目录分析

    一 文件夹 1 api 硬件无关的功能函数的API 这些函数是uboot本身使用的 uboot移植时基本不用管 2 api examples API相关的测试事例代码 3 board board是板的意思 就是开发板 这个文件夹下放的每一个
  • 高合汽车旗下可进化超跑SUV高合HiPhi X亮相海口国际新能源车展

    2021年1月8日 高端新能源智能出行品牌高合汽车旗下高合HiPhi X亮相第三届海口国际新能源汽车展览会 华人运通高合汽车创始人丁磊在现场透露 上市至今高合HiPhi X限量3000辆创始版车型即将预订售罄 累计收获了32000多位留资用
  • 自定义busybox文件系统存在的问题

    1 串口终端看不到命令行入口 只能在显示器端HDMI 看到 2 内核默认无法加载除了busybox openwrt文件系统 debian ubuntu无法加载
  • uboot联网以及uboot重启问题

    一 配置uboot联网 虚拟机联网 配置uboot联网 1 配置uboot环境变量 setenv ipaddr 192 168 10 50 开发板ip地址 setenv ethaddr 00 04 9f 04 d2 35 mcu期间地址 多
  • NXP imx6ull uboot-imx-rel_imx_4.1.15无法从SD卡加载内核

    我imx6ull使用的是正点原子的alpha开发板 我将我的SD卡分成了两个分区 第一个分区格式化为fat 用来存放zImage和dtb 第二个分区格式化为EXT4格式 这个分区作为根文件系统 遇到的问题是 我编译好kernel后 尝试通过
  • linux文件系统初始化过程(4)---加载initrd(中)

    一 目的 上文详细介绍了CPIO格式的initrd文件 本文从源代码角度分析加载并解析initrd文件的过程 initrd文件和linux内核一般存储在磁盘空间中 在系统启动阶段由bootload负责把磁盘上的内核和initrd加载到指定的
  • 【uboot内核适配学习】uboot 修改默认ip

    1 修改默认ip作用 设备出场的时候都需要默认的ip 2 修改措施 找到uboot芯片配置文件 不同芯片厂家适配的文件必定是不一样的 位置也可能不一样 define CONFIG ETHADDR 00 40 5c 26 0a 5b MAC地
  • 图像与 zImage 与 uImage

    它们之间有什么区别 我知道u boot需要uImage格式的内核 我使用的系统首先从第一阶段加载程序启动 然后调用 u boot 我想放弃 u boot 并直接从第一阶段加载程序启动 我必须使用哪种类型的内核映像 它们之间有什么区别 Ima
  • 如何从u-boot启动Linux内核?

    我的 Linux 内核镜像uImage在我的U盘里 我想从 U Boot 启动它 还有设备树文件am335x evm dtb在我的U盘里 我所做的如下 U Boot usb start Re start USB USB0 scanning
  • Yocto 添加自定义 UBoot 环境变量

    我正在尝试通过 Yocto 构建过程添加两个新的 u boot 环境变量 My file u boot imx 2021 04 bbappend包含 FILESEXTRAPATHS prepend THISDIR PN SRC URI fi
  • 基于 BBB DT 的方法

    我已经使用平台设备模型成功为我的自定义协议实现了基于 GPIO 的驱动程序 我想使用设备树方法升级它 因此 对于初学者来说 我有一个 beaglebone black 并且我使用在 uboot 控制台消息显示期间启用和验证的设备树配置交叉编

随机推荐

  • Swift 之 JSONEncoder 和 JSONDecoder

    Swift 之 JSONEncoder 和 JSONDecoder 摘自官方文档 A type that can convert itself into and out of an external representation Codab
  • WSL2 BIOS已经开启了VT-x 但windows内安装显示不支持

    问题 安装安卓模拟器之后 wsl打开报错 已退出进程 代码为 4294967295 WSL 2问题解决 WSL 2与VMWare 或其他使用Intel VT x技术的虚拟机 虽然可以一起运行 但是安装WSL2后不禁用虚拟平台的话无法安装采用
  • TensorFlow2.0正式版安装

    文章目录 一 熟悉conda常用的cmd指令 二 TF2 0 CPU版本安装 1 新建TF2 0 CPU环境 2 进入TF 2C环境 3 在环境中安装TF2 0 CPU版本 4 测试TensorFlow是否安装成功 三 测试一个简单的Ten
  • C语言基础练习题(矩阵乘法)

    给定一个N阶矩阵A 输出A的M次幂 M是非负整数 例如 A 1 2 3 4 A的二次幂 7 10 15 22 输入格式 第一行是一个正整数N M 1 N 30 0 M 5 表示矩阵A的阶数和要求的幂数接下来N行 没行N个绝对值不超过10的非
  • 【Darknet】yolo层forward_yolo_layer函数详解

    最近在研究Darknet源码 这篇主要分享一下yolo层中forward yolo layer函数的源码 前言 神经网络是由很多层叠加起来的 Darknet也不例外 Darknet中的每一层都有make xxx layer forward
  • Ubuntu如何开启共享文件夹---亲测有效

    Ubuntu如何开启共享文件夹 亲测有效 一 安装VM Tools 选择安装VMware Tools 安装完后 在文件中会有一个压缩包 将压缩包移动到桌面或者其他路径进行解压缩 若出现没有足够的空间提取 1 使用归档管理器打开 2 提取 3
  • Docker 启动RabbitMQ 服务,外部不能正常访问

    今天在总结RabbitMQ消息队列服务器时 遇到一个小问题 服务器拉取RabbitMQ 服务器镜像正常 启动RabbitMQ 镜像服务正常 但通过外部访问RabbitMQ 管理端提示无法访问 第一步 检查服务器的防火墙状态 firewall
  • Linux网络编程基本知识

    Linux网络编程基本知识 from 实战Linux Socket 编程 1 套接口 include
  • linux掌握物理页面的分配和回收,系统软件课程设计指导书-2010-12

    2 本次课程设计要求阅读的Linux源代码版本为2 4 18 其他版本无效 3 结合操作系统基本原理进行代码分析 并进行详细分析和完整注释 注释越详细 成绩越好 5 设计型题目要按照要求完成全部算法 6 一定要充分地考虑个人的能力选择相应的
  • 更新和寻找最新的sid——持续更新中

    第一种 开始程序SAS中找到续订SAS软件 浏览找到最新的sid txt文件 确定 更新许可 确定 第二种 打开SAS 在编辑器中复制粘贴sid文件中第一个BEGIN下的 PROC SETINIT SAVE RUN 大概20行 点击上方的提
  • Vue-cli实现登录和重置功能

    Vue cli实现登录和重置功能 1 项目初始化 安装Vue脚手架 npm install g vue cli 通过Vue脚手架创建项目 在cmd命令行中输入 vue ui 使用图形化界面创建项目 配置Vue路由 配置Elment UI组件
  • Android使用Toolbar来添加右上角菜单

    好久没写东西了 最近学到了很多东西但是也非常忙 把一些知识积累一下 先上个效果图 很常见的一个需求 我们来看下怎么实现的 非常简单 activity main xml
  • 解决远程仓库配置密钥后,进行代码提交操作输入密码无效的问题

    问题产生 在开发的过程中 进行代码提交 弹出远程仓库需要录入密码 即使填入正确的密码也无反应 解决思路 公钥与私钥首先要配置正确 但配置完后依然无法生效 原因是git默认没有用已生成的公钥私钥的配置文件 在git的安装目录 Git etc
  • 分块矩阵计算行列式三板斧

    第一板斧 上下三角分块 第二板斧 对角为0零的分块 第三板斧 全分块 小招 A 2 B 2 其他招式 利用特征值计算行列式
  • pull request 时遇到 conflicted 的解决方法

    今天 pull request 的时候遇到了 conflicted 的问题 发现是因为相比于最开始 fork 的内容 原仓库的内容发生了变化 而我 fork 后的仓库没有及时更新 于是 首先点击 fork from 后的刷新标识 同步 fo
  • Unity学习笔记05-场景切换和加载

    Unity场景简介 场景 顾名思义就是我们在游戏中所看到的物品 建筑 人物 背景 声音 特效等 基本上和我们玩游戏时所看到的游戏 场景 是同一个概念 Unity3D中 场景 是一个视图 我们通过 场景 这个视图 来编辑 布置游戏中玩家所能见
  • Java Stream使用多个过滤器(filter)或复杂条件方法用法及简单写法代码

    本文主要介绍Java中 对List列表集合stream等 使用多个过滤器 filter 进行数据筛选 或使用复杂条件过滤数据的方法 以及简单写法代码 原文地址 Java Stream使用多个过滤器 filter 或复杂条件方法用法及简单写法
  • Go 编程学习路线

    安装IED vscode atom subl 插件安装错误总结 入门 go by example the way to go go web 编程 豆瓣 提升书籍 The Go Programming Language 2015 11 pdf
  • Oracle查看用户所在的表空间

    oracle 查看表空间有哪些表 select from dba tables where tablespace name 表空间名 注意表空间名大小写敏感 select table name tablespace name from us
  • linux的进程1:rootfs与linuxrc

    在内核启动的最后阶段启动了三个进程 进程0 进程0其实就是刚才讲过的idle进程 叫空闲进程 也就是死循环 进程1 kernel init函数就是进程1 这个进程被称为init进程 进程2 kthreadd函数就是进程2 这个进程是linu