前言:我觉得我的文章相对来说都是比较浅显的。一些初学者可以看看,这也是我不在嵌入式那个版上发文的原因。对于高手来说,如果你们不吝啬时间的话,希望也能帮我看看,指点一下其中的错误。这也是我到这里来和大家交流的目的。

在完成了模块驱动后,就要挂载文件系统了。我一直以为:

我编译的内核是采用了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启动过程中文件系统的加载相关推荐

  1. Linux系统安装驱动过程中ko文件加载错误(Required key not available)的解决办法

    Linux系统安装驱动过程中ko文件加载错误(Required key not available)的解决办法 问题描述 在Ubuntu上使用CP210x USB转UART设备时需要安装驱动程序(CP ...

  2. Linux内核学习系列(7)——execve与需求加载

    前言 通过本系列前几篇文章的梳理,我们对linux0.12内核功能有了初步地了解.进一步地,我们看看linux如何在前述基础上执行用户自定义程序.其中的重点为execve与需求加载. 样例 在进入正题 ...

  3. 图像处理过程中图像不能加载的其中一个原因解答

    我做了一个图像处理程序,编译是正确的,但是加载不进去BMP格式的图片,找了好久的原因,终于被我找到了: 需要在 void CImageProcessingDoc::Serialize(CArchive ...

  4. Linux入职基础-4.10_系统启动过程(3):Linux内核(vmlinuz)启动

    Linux系统启动过程(3):Linux内核(vmlinuz)启动 上节回顾:详解见上一篇<内核的引导程序>,内核模块在获取控制权后开始工作,内核(vmlinuz-2.6.18-238.e ...

  5. Linux内核如何装载和启动一个可执行程序-----实验7

    2015108 李泽源 Linux内核如何装载和启动一个可执行程序 理解编译链接的过程和ELF可执行文件格式,详细内容参考本周第一节: 编程使用exec*库函数加载一个可执行文件,动态链接分为可执行程 ...

  6. Linux内核如何装载和启动一个可执行程序

    李洋  原创作品转载请注明出处 <Linux内核分析>MOOC课程 首先简单介绍一下相关背景:ELF(Executable and Linking Format)是一种对象文件的格式,用于 ...

  7. 跟踪分析Linux内核5.0系统调用处理过程

    跟踪分析Linux内核5.0系统调用处理过程 学号384 原创作业转载请注明出处+中国科学技术大学孟宁老师的Linux操作系统分析 https://github.com/mengning/linuxk ...

  8. linux越狱amd卡代码,为Linux内核贡献27.5万行代码中:AMD意外泄漏下一代APU信息

    原标题:为Linux内核贡献27.5万行代码中:AMD意外泄漏下一代APU信息 AMD在不经意间泄露了自家下一代APU的信息,其代号"Van Gogh(梵高)". 据外媒报道称,A ...

  9. Linux内核I/O报错信息中hostbyte与driverbyte含义

    文章目录 1.现象举例 2.hostbyte和driverbyte 3.FC链路的硬件故障 4.源码分析 1.现象举例 1.hostbyte=DID_BAD_TARGET driverbyte=DRI ...

  10. linux 内核源代码漫游,Linux内核源代码漫游——

    Linux内核源代码漫游 Alessandro Rubini著, rubini@pop.systemy.it 赵炯 译,gohigh@shtdu.edu.cn 本章试图以顺序的方式来解释Linux源代 ...

最新文章

  1. We can all choose freedom over a job
  2. Navicat Premium
  3. Java中读取本地图片并转为base64解决办法
  4. android 获取屏幕的宽高
  5. POJ - 1041 John's trip(欧拉回路)
  6. cobalt strick 4.0系列教程(3)---数据管理
  7. x86异常处理与中断机制(3)中断处理过程
  8. 腾讯视频客户端如何设置快进速度
  9. 从本地或网页加载图片
  10. 依赖编程内部知识的C语言习惯用法
  11. 思源黑体下载 - Google 联合 Adobe 发布免费开源优雅的设计字体 (简繁中文/日韩文)
  12. python qt教程视频 下载_PyQt5开发与实战教程,视频教程下载
  13. 第九届蓝桥杯题解(部分)
  14. 如何从初级程序员到中级程序员
  15. 世界互联网大会为什么把这么重要的奖颁给蚂蚁金服?
  16. 计算机毕业设计Java宠物收养管理系统(源码+系统+mysql数据库+lw文档)
  17. AndroidIOS APP启动速度专项测试方法
  18. html模拟点击某个键盘按钮,如何使用JavaScript模拟按键或单击?
  19. 深潜Kotlin协程(二十一):Flow 生命周期函数
  20. Android接入第三方QQ登录

热门文章

  1. SprinBoot整合SSM之添加
  2. H264所采用的指数格伦布熵编码算法原理及应用
  3. spirng整合rmi
  4. 在centos中安装samba 服务
  5. 项目中的textarea遇到的小问题
  6. [转载]如何让自己变得有趣
  7. WF+WCF+WPF第三天-WF实现一个软件自动测试框架
  8. 删除visual studio最近打开的项目列表
  9. c语言组json包,json格式解析和libjson的用法介绍(关于cjson的使用方法)
  10. mos 多路模拟电子开关_软开关设计 || 软开关硬件三极管、MOS管典型电路分析