历史上的今天
返回首页

历史上的今天

今天是:2025年02月25日(星期二)

正在发生

2020年02月25日 | ARM开发板系统移植-----rootfs的制作

2020-02-25 来源:eefocus

前面两篇文章分别介绍了mini2440开发板上运行的bootloader和kernel,到这里系统启动后其实是停留在一个“僵死”的状态---无法挂载根文件系统。


这里将介绍如何制作一个根文件系统,并且挂载到内核中---即让内核能够访问到文件系统中的目录和文件。从用户的角度来看文件系统无非就是各个目录和文件,注意,这些目录和文件可以存在内存中,也可以存在Nand Flash 或者NOR Flash中,视具体的文件系统而定。本文就用基于内存的initram 和基于网络的nfs文件系统做例子介绍文件系统的概念。


首先什么是文件系统?就本人理解而言,它就是操作系统提供的一种抽象,即操作系统将存储介质抽象化,并提供一种访问这种抽象的方法,让用户能够简洁且方便的访问存储介质(如硬盘和nand flash等)。为了实现这种抽象,操作系统把存储介质进行单元划分,文件存储在介质时就占据若干个单元。当然操作系统还记录下各个文件的基本属性(如文件大小、存储位置、所属人、访问权限等等),并组成一个文件控制块(FCB)。所有文件的FCB保存在一个目录文件中,即一个目录文件就是内容是FCB的文件,其自身也有FCB目录文件的FCB记录在上一层目录中,这样层层往上连接就形成了树状目录结构。或者这样描述:文件系统包含两部分:一组文件(即所要保存的数据)和目录文件(目录文件的内容是每个文件的FCB,FCB记录了文件的所有属性)。如下图所示:

如上图所示是一个典型的Linux系统目录结构,从用户的角度看这就是Linux的文件系统,从右往左看,假设run目录下有个文件file,那么file的FCB就保存在run目录文件中,而run又是一个文件,其FCB 保存在VAR这个目录文件中,最后var的FCB就保存在根目录文件中。一次要访问到file,实质就是要沿着/var/run/file 这样一个路径。但是从操作系统的角度来看,这仅仅是提供给用户的可视性文件系统,具体的实现细节(比如文件的物理结构和逻辑结构)它已经隐藏起来。需要注意的是文件系统存储在外存储器中(nand flash等),内存中也会有相应的表明文件属性的目录项,用以加快操作系统访问文件的效率。即内核中也会有FCB的内容,甚至目录文件也会存在内存中。


根据上面的背景知识其实就可以总结出建立根文件系统的步骤,无非就是创建这些目录和文件,然后让内核能够认识它们(即在内核中挂载根文件系统)。


具体步骤如下:

1、创建各个目录和必须的文件

1.1、创建空目录:

#mkdir rootfs

#cd rootfs

#mkdir bin dev etc lib proc sbin sys usr mnt tmp var

#mkdir usr/bin usr/lib usr/sbin lib/modules


1.2、创建设备文件:创建Linux启动需要的设备驱动文件:控制台和空

#cd rootfs/dev

#mknod -m 666 console c 5 1

#mknod -m 666 null c 1 3


1.3、加入配置文件:添加内核启动的一些配置文件

#tar etc.tar.gz

#mv etc/* .../rootfs/etc/ -rf


1.4、添加内核模块:

#cd .../linux

#make modules ARCH=arm CROSS_COMPILE=arm-linux-

#make modules_install ARCH=arm INSTALL_MOD_PATH=.../rootfs


1.5、编译/安装busybox:使用busybox添加常用的命令如cd、ls、date等等

#make menuconfig

#make

#make install    


2、挂载根文件系统:事实上挂载根文件系统就是完成指明根文件系统放在何处、操作系统如何使用文件系统的目录文件等等工作。这里介绍一个基于内存的挂载方式,即根文件系统在编译后直接整合在内核代码中,随着代码被加载到内存中,内核启动过程中可以直接使用文件系统。initramfs文件系统的制作:


2.1、#cd  .../rootfs/

#ln -s ./bin/busybox init

2.2、 配置内核,让内核知道文件系统的挂载方式是initramfs。

2.3、编译内核

2.4、设置uboot参数:

setenv bootargs noinitrd console=ttySAC0,115200


完成上面的工作就可以制作成一个拥有initramfs 文件系统的完整的Linux系统。


至此一个完整的Linux系统就已经能够在mini2440中运行,接下来就可以在其上进行驱动或者应用开发。

推荐阅读

史海拾趣

DIOO公司的发展小趣事

为了进一步拓展市场,DIOO公司决定实施国际化战略。在21世纪初,DIOO公司成功打入欧洲和北美市场,与当地知名电子产品制造商建立了合作关系。通过引进国际先进的生产技术和设计理念,DIOO公司的产品逐渐赢得了全球消费者的认可和喜爱。同时,DIOO公司还积极参加国际电子展会和论坛,与全球业界同仁交流学习,不断提升自身的竞争力和影响力。

Dearborn Electronics Inc公司的发展小趣事

Dearborn Electronics Inc.始终将品质放在首位,建立了严格的质量管理体系。公司从原材料采购到生产、检验、包装等各个环节都进行严格的质量控制,确保每一件产品都符合最高标准。此外,公司还不断引进先进的生产设备和技术,提高生产效率和产品质量。

ARMKEIL Microcontroller Tools公司的发展小趣事

2005年,对于Keil公司来说是一个具有里程碑意义的年份。在这一年,英国的ARM公司看中了Keil在嵌入式系统开发工具领域的领先地位和技术实力,决定对其进行收购。收购完成后,Keil公司正式成为ARM公司的一部分,继续专注于嵌入式系统开发工具的研发和销售。这一事件标志着Keil公司进入了一个新的发展阶段,也为其未来的发展奠定了坚实的基础。

General Transistor Corp公司的发展小趣事

随着技术的不断进步,GTC意识到仅仅作为分销商已无法满足市场需求。于是,公司开始逐步涉足电子元器件的生产领域,专注于研发和生产具有自主知识产权的产品。通过持续的技术创新和研发投入,GTC成功推出了一系列高性能的晶体管、集成电路等新产品,进一步丰富了其产品线。这些产品不仅在国内市场受到好评,还逐渐走向国际市场。

汇科公司的发展小趣事

随着技术的不断成熟和市场的不断拓展,苏州汇科技术股份有限公司开始在全国范围内进行产业布局。公司通过设立办事处、加强与客户的沟通合作等方式,进一步扩大了市场份额。同时,公司还积极寻求与国际知名企业的合作,共同开发新产品、新技术和新市场,为公司的未来发展奠定了坚实基础。

CDIL[Continental Device India Pvt. Ltd.]公司的发展小趣事

近年来,CDIL积极响应政府政策,利用生产挂钩激励计划(PLI)和电子元件和半导体制造促进计划(SPECS),计划将其产能从目前的5亿片基础上提高1亿片。同时,公司还计划在未来几年内建立两条新的ATMP生产线,以进一步提升产能和技术水平。此外,CDIL还在碳化硅(SiC)等新技术领域进行了深入研发,以满足电动汽车、电源管理设备等新兴市场的需求。

问答坊 | AI 解惑

常用ARM指令集及汇编

各种命令的简单讲解,很好的查阅资料…

查看全部问答>

这个电路能改成电子控制的吗?

这是一个机械臂继电器控制电路!想用电子电路改造一下!不知可否? (机械臂原始位置在A点XW1位,启动按钮后开始向B点运动电机正转,接触到XW2时电机反转,返回到A点停止等待下一次启动!)…

查看全部问答>

DSP芯片的基本结构和特征

本章首先介绍了DSP芯片的基本结构,比较详细地介绍了TI公司的系列DSP芯片的基本特征,并简要介绍了AD等公司的DSP芯片。了解DSP芯片的结构和特征是采用DSP芯片设计DSP系统的基础。需要特别指出的是,由于DSP芯片的发展速度很快,用户在选用DSP芯片时 ...…

查看全部问答>

求BDA 框架驱动!!

求BDA框架的实例代码,我下的XP的DDK里面没有这些代码!! 请大家帮助给一下!!…

查看全部问答>

大家赶快开博吧

从今天开始,如果时间允许,我想每天都写一篇博客,所以从今开始我要开博了,希望大家多多光顾我的博客!~ 其实早就想开博了,但是由于种种原因没有开,现在实习了,想把工作和学习的一些事情写上来,帮助那些还在学校的学弟学妹们了解一下工作人 ...…

查看全部问答>

【MSP430共享】MSP430F1系列单片机常用模块应用原理

这个是我以前从微控网找到的,非常不错,我就是看它学MSP430的 从基本模块讲起,是不可多得的好资料哟       [ 本帖最后由 ddllxxrr 于 2011-9-8 18:38 编辑 ]…

查看全部问答>

BeagleBone 硬件性能测试

.mainbox h1{background:none;}  <!-- 1.      概述 本文是关于BeagleBone开发板主要功能模块的性能测试。为硬件开发人员选择AM3359进行系统设计提供必要的测试数据和对比结果。 2.   &n ...…

查看全部问答>

LED半导体照明应用中存在的问题

1、散热 2、缺乏标准,产品良莠不齐 3、存在价格与设计品质问题,最终消费者选择LED照明,缺乏信心 4、半导体照明在电气设计方面与传统照明有很大差别,传统灯具企业需要经验/技能积累过程 5、大家都看好该市场,但是还没有规模上量 特点: ...…

查看全部问答>

Modelsim仿真使用小结

针对ISE下的Modelsim 仿真可以分为直接在ISE中采用添加库的方式安装Modelsim,例如 当需要仿真的时候,选中Simulation,而开发的时候选择Implementation。   另外一种是采用运行Modelsim然后导入VHDL文件,也就是仿真的实体,再导入test ...…

查看全部问答>

helper2416开发板GDB远程调试的总结技巧

1 .生成可调试程序比如一个源文件:main.cpp交叉编译生成test 加-g生成调试信息.arm-linux-gcc main.cpp -g -o test千万不要strip,否则调试信息就不存在了. 2. gdbserver调试假设板子IP为192.168.0.19,   pc ip为192.168.0.108板子上:gdb ...…

查看全部问答>