ARM开发板系统移植-----rootfs的制作

发布者:Ziyu2022最新更新时间:2020-02-25 来源: eefocus关键字:ARM开发板  系统移植  rootfs 手机看文章 扫描二维码
随时随地手机看文章

前面两篇文章分别介绍了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中运行,接下来就可以在其上进行驱动或者应用开发。

关键字:ARM开发板  系统移植  rootfs 引用地址:ARM开发板系统移植-----rootfs的制作

上一篇:ARM开发板系统移植-----u-boot的编译
下一篇:ARM开发板系统移植-----kernel的编译

推荐阅读最新更新时间:2024-11-10 15:25

minis3c2440移植之文件系统移植
说在前头:linux重要的常见系统文件都含有以下的文件,我们所做的就是要编译生成这些文件。 bin 普通文件目录(里面是普通的shell脚本命令二进制文件) sbin 系统文件目录(里面是系统文件的shell脚本命令二进制文件) dev 设备文件目录(里面是对一些外设的驱动配置如:网卡驱动) etc 配置文件目录 lib 库文件目录(里面是系统调用时一些常用到的静态和动态库) proc 内存文件目录(一般作为内存映射) mnt 外部设备挂目录(常见的CD/DVD,USB外设都会挂在次目录下) tmp 对于我们现在来说的动作就具体的编译生成这些文件,首先用的是busybox- 1.13.1编译工具直接生成bin和sbin这两
[单片机]
fatfs文件系统移植到STM32F10x
//文件系统与SD卡驱动接口文件diskio.c #include diskio.h #include ffconf.h #include #include MMC_SD.h DSTATUS disk_initialize ( BYTE drv ) { int Status; switch (drv) { case 0 : // Status = MSD0_Init(); Status = SD_Init(); if(Status==0){ return RES_OK; }else{ return STA_NOINIT; } case 1
[单片机]
mini2440系统移植篇之init启动流程
1. 启动 内核启动应用程序/linuxrc busybox ini.c init_main 设置信号处理函数 初始化控制台 parse_inittab解析inittab 1.1. 解析inittab file = open(INITTAB, “r”); //打开配置文件/etc/inittab new_init_action //1 创建一个init_action结构,填充 //2 把结构放入init_action_list链表 默认配置 ::sysinit:/etc/init.d/rcS ::askfirst:/bin/sh tty2::askfirst:/bin/sh tty3::askfirst:/bin/sh tty4
[单片机]
移植minicom到ARM开发板
最近调试自己做的S5PV210的底板上面的串口。因为为了测试一个串口而写程序很麻烦。所以,直接移植了一个minicom到开发板上面。这样就可以直接进行串口收发了。特别是在我需要同时测试多个串口的时候,比写程序来得快。不多废话了,下面看操作流程。 第一步: 需要交叉编译ncurses,否则minicom不能编译。直接去官网下载。地址不发。 新建一个文件叫run,然后增加可执行属性,最后在其中加入如下配置 ./configure CC=arm-linux-gcc --prefix=/opt/4.3.2/arm-none-linux-gnueabi --host=arm-linux CPPFLAGS=-I/opt/4.3.2/arm
[单片机]
ucosi操作系统移植到STM32
这个工作主要是根据网友的经验资料来学习移植的。总的来说需要下面几个参考资料。 ARM Cortex-m3权威指南 官方移植文档资料 网友移植成功经验资料 这三种资料在我的资源上传里面都能找到。 我在官网上下的是官方已经移植好的到STM32F103评估板的资料,很多部分已经实现了,所以需要改动的地方很少,不同的地方可以参考第三种网友移植成功经验资料,里面有详细说明。我下的是ucosii2.86版本。 下面说说移植过程: 移植主要涉及到两个源文件,os_cpu_c.c和os_cpu_a.asm,os_cpu.h。其他文件是ucosii核心文件,不需要修改。还有两个配置文件app_cfg.h和os_cfg.h
[单片机]
Linux系统移植开发篇1:系统移植前说明及源码编译
本文章为《STM32MP157 Linux系统移植开发篇》系列中的一篇,笔者使用的开发平台为华清远见FS-MP1A开发板(STM32MP157开发板)。stm32mp157是ARM双核,2个A7核,1个M4核,A7核上可以跑Linux操作系统,M4核上可以跑FreeRTOS、RT-Thread等实时操作系统,STM32MP157开发板所以既可以学嵌入式linux,也可以学stm32单片机。 针对FS-MP1A开发板,除了Linux系统移植篇外,还包括其他多系列教程,包括Cortex-A7开发篇、Cortex-M4开发篇、扩展板驱动移植篇、Linux应用开发篇、FreeRTOS系统移植篇、Linux驱动开发篇、硬件设计篇、人工智
[单片机]
Linux<font color='red'>系统移植</font>开发篇1:<font color='red'>系统移植</font>前说明及源码编译
基于AT91SAM9X35EK的嵌入式Linux+UBI根文件系统移植成功
经过近一个月的学习与实践,终于在AT91SAM9X35EK开发板上跑起了Linux系统,用的是UBI文件系统,开发环境与不断的编译、查找资料、烧写验证,下载相关的软件,占了很多的时间,不过不断的克服困难,就能不断的前进。路很长,但需要耐心不断走下去。 开发环境为: CentOS6.5 Linux虚拟机。 硬件为:AT91SAM9X35EK NandFlash启动(Bootstrap+Uboot+Linux Kernel+UBI根文件系统全烧写在NandFlash中)。 使用较新的AT91Bootstrap与Uboot。 使用较新的稳定的Linux version 2.6.39(ATmel官方提供AT91SAM9X35E
[单片机]
基于AT91SAM9X35EK的嵌入式Linux+UBI根文件<font color='red'>系统移植</font>成功
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved