linux内核启动文件系统,Linux启动过程中文件系统的加载
前言:我觉得我的文章相对来说都是比较浅显的。一些初学者可以看看,这也是我不在嵌入式那个版上发文的原因。对于高手来说,如果你们不吝啬时间的话,希望也能帮我看看,指点一下其中的错误。这也是我到这里来和大家交流的目的。
在完成了模块驱动后,就要挂载文件系统了。我一直以为:
我编译的内核是采用了initrd的模式,设备是在RAM DISK文件系统下的/linuxrc脚本程序加载的,因此在这上面浪费了很多时间。不过对initrd算是有了比较深的理解,这个等一下再说。
其实,内核挂载的第一个文件系统就是nand flash中的root.cramfs,关于挂载相关的代码mount_root()在文件/fs/super.c里面。随后将devcie文件系统挂载到/dev目录下面,代码为mount_devfs_fs()。因为采用了noninitrd的模式,因此文件系统的挂载就完毕了,init进程继续往下走到一直到运行:
if (execute_command)execve(execute_command,argv_init,envp_init);这里init切换成另外一个线程,运行程序在execute_command中定义。execute_command是vivi传进来的命令行,启动过程中可以看到:
Kernel command line: noinitrd root=/dev/bon/2 init=/linuxrc console=ttyS0因此execute_command对应/linuxrc,因此程序运行根目录下的脚本linuxrc,在我的系统中他对应:
#!/bin/shecho "mount /etc as ramfs"/bin/mount -n -t ramfs ramfs /etc/bin/cp -a /mnt/etc/* /etcecho "re-create the /etc/mtab entries"/bin/mount -f -t cramfs -o remount,ro /dev/mtdblock/3 //bin/mount -f -t ramfs ramfs /etcexec /sbin/init这个就不解释了(最后是启动bash),大家可以在linux下把root.cramfs挂载到/mnt下面看看内容就知道了:
mount –t cramfs –o loop root.cramfs /mnt/cramfs这里其实想告诉大家,我们如何实现开机自动加载一些运行程序,现在应该很明白了吧,写个脚本就OK了。(其实是我以前一直在yy这个问题)最后讲一下initrd(initail ram disk)原理我就不说了,陈词滥调了,网上多的很。我将一点我的理解,initrd包含了部分module的驱动,从一定程度上分担了内核的大小,因为启动的时候这两者还是要同时被load到memory中去的;因此更重要的是它可以保证内核的可移植性,对不同的硬件平台,只要提供不同的initrd文件系统,而内核可以保持不变。因此,initrd的主要作用是加载一些复杂的与平台相关的硬件,如SCSI硬盘驱动,网卡驱动(像无盘工作站,使用nfs)等。
linux内核启动文件系统,Linux启动过程中文件系统的加载相关推荐
- Linux系统安装驱动过程中ko文件加载错误(Required key not available)的解决办法
Linux系统安装驱动过程中ko文件加载错误(Required key not available)的解决办法 问题描述 在Ubuntu上使用CP210x USB转UART设备时需要安装驱动程序(CP ...
- Linux内核学习系列(7)——execve与需求加载
前言 通过本系列前几篇文章的梳理,我们对linux0.12内核功能有了初步地了解.进一步地,我们看看linux如何在前述基础上执行用户自定义程序.其中的重点为execve与需求加载. 样例 在进入正题 ...
- 图像处理过程中图像不能加载的其中一个原因解答
我做了一个图像处理程序,编译是正确的,但是加载不进去BMP格式的图片,找了好久的原因,终于被我找到了: 需要在 void CImageProcessingDoc::Serialize(CArchive ...
- Linux入职基础-4.10_系统启动过程(3):Linux内核(vmlinuz)启动
Linux系统启动过程(3):Linux内核(vmlinuz)启动 上节回顾:详解见上一篇<内核的引导程序>,内核模块在获取控制权后开始工作,内核(vmlinuz-2.6.18-238.e ...
- Linux内核如何装载和启动一个可执行程序-----实验7
2015108 李泽源 Linux内核如何装载和启动一个可执行程序 理解编译链接的过程和ELF可执行文件格式,详细内容参考本周第一节: 编程使用exec*库函数加载一个可执行文件,动态链接分为可执行程 ...
- Linux内核如何装载和启动一个可执行程序
李洋 原创作品转载请注明出处 <Linux内核分析>MOOC课程 首先简单介绍一下相关背景:ELF(Executable and Linking Format)是一种对象文件的格式,用于 ...
- 跟踪分析Linux内核5.0系统调用处理过程
跟踪分析Linux内核5.0系统调用处理过程 学号384 原创作业转载请注明出处+中国科学技术大学孟宁老师的Linux操作系统分析 https://github.com/mengning/linuxk ...
- linux越狱amd卡代码,为Linux内核贡献27.5万行代码中:AMD意外泄漏下一代APU信息
原标题:为Linux内核贡献27.5万行代码中:AMD意外泄漏下一代APU信息 AMD在不经意间泄露了自家下一代APU的信息,其代号"Van Gogh(梵高)". 据外媒报道称,A ...
- Linux内核I/O报错信息中hostbyte与driverbyte含义
文章目录 1.现象举例 2.hostbyte和driverbyte 3.FC链路的硬件故障 4.源码分析 1.现象举例 1.hostbyte=DID_BAD_TARGET driverbyte=DRI ...
- linux 内核源代码漫游,Linux内核源代码漫游——
Linux内核源代码漫游 Alessandro Rubini著, rubini@pop.systemy.it 赵炯 译,gohigh@shtdu.edu.cn 本章试图以顺序的方式来解释Linux源代 ...
最新文章
- We can all choose freedom over a job
- Navicat Premium
- Java中读取本地图片并转为base64解决办法
- android 获取屏幕的宽高
- POJ - 1041 John's trip(欧拉回路)
- cobalt strick 4.0系列教程(3)---数据管理
- x86异常处理与中断机制(3)中断处理过程
- 腾讯视频客户端如何设置快进速度
- 从本地或网页加载图片
- 依赖编程内部知识的C语言习惯用法
- 思源黑体下载 - Google 联合 Adobe 发布免费开源优雅的设计字体 (简繁中文/日韩文)
- python qt教程视频 下载_PyQt5开发与实战教程,视频教程下载
- 第九届蓝桥杯题解(部分)
- 如何从初级程序员到中级程序员
- 世界互联网大会为什么把这么重要的奖颁给蚂蚁金服?
- 计算机毕业设计Java宠物收养管理系统(源码+系统+mysql数据库+lw文档)
- AndroidIOS APP启动速度专项测试方法
- html模拟点击某个键盘按钮,如何使用JavaScript模拟按键或单击?
- 深潜Kotlin协程(二十一):Flow 生命周期函数
- Android接入第三方QQ登录
热门文章
- SprinBoot整合SSM之添加
- H264所采用的指数格伦布熵编码算法原理及应用
- spirng整合rmi
- 在centos中安装samba 服务
- 项目中的textarea遇到的小问题
- [转载]如何让自己变得有趣
- WF+WCF+WPF第三天-WF实现一个软件自动测试框架
- 删除visual studio最近打开的项目列表
- c语言组json包,json格式解析和libjson的用法介绍(关于cjson的使用方法)
- mos 多路模拟电子开关_软开关设计 || 软开关硬件三极管、MOS管典型电路分析