基于mini6410的Linux内核与根文件系统制作(linux 2.6.38)

内核制作

一、清除此前内核的留下的文件及补丁等(make distclean)

			xxx@xxx-virtual-machine:~/mini6410/linux-2.6.38$ make distclean

二、进行内核的配置(make menuconfig ARCH=arm )

			xxx@xxx-virtual-machine:~/mini6410/linux-2.6.38$ make menuconfig ARCH=arm

在这里插入图片描述
配置如上

三、编译内核(make uImage ARCH=arm CROSS_COMPILE=arm-linux-)

			xxx@xxx-virtual-machine:~/mini6410/linux-2.6.38$ make uImage ARCH=arm CROSS_COMPILE=arm-linux-

文件系统的介绍

关于文件系统的“”啰嗦“”(介绍)
文件系统:文件系统是对一个存储设备上的数据和元数据进行组织的机制。这种机制有利于用户和操作系统的交互。
尽管内核是 Linux 的核心,但文件却是用户与操作系统交互所采用的主要工具。这对Linux 来说尤其如此,这是因为在UNIX 传统中,它使用文件I/O 机制管理硬件设备和数据文件。
在Linux没有文件系统的话,用户和操作系统的交互也就断开了,例如我们使用最多的交互shell,包括其它的一些用户程序,都没有办法运行。在这里可以看到文件系统相对于Linux操作系统的重要性

Linux启动时,第一个必须挂载的是根文件系统;若系统不能从指定设备上挂载根文件系统,则系统会出错而退出启动

linux文件系统一般有如下几个目录:

  1. /bin目录 :该目录下的命令可以被root与一般账号所使用,由于这些命令在挂接其它文件系统之前就可以使用,所以/bin目录必须和根文件系统在同一个分区中。
  2. /sbin 目录:该目录下存放系统命令,即只有系统管理员(俗称最高权限的root)能够使用的命令,系统命令还可以存放在/usr/sbin,/usr/local/sbin目录下,/sbin目录中存放的是基本的系统命令,它们用于启动系统和修复系统等,与/bin目录相似,在挂接其他文件系统之前就可以使用/sbin,所以/sbin目录必须和根文件系统在同一个分区中。
  3. /dev目录:该目录下存放的是设备与设备接口的文件,设备文件是Linux中特有的文件类型,在Linux系统下,以文件的方式访问各种设备,即通过读写某个设备文件操作某个具体硬件。
  4. /etc目录:该目录下存放着系统主要的配置文件
  5. /lib目录:该目录下存放共享库和可加载(驱动程序),共享库用于启动系统。运行根文件系统中的可执行程序,比如:/bin/sbin 目录下的程序。
  6. /usr目录:/usr目录的内容可以存在另一个分区中,在系统启动后再挂接到根文件系统中的/usr目录下。里面存放的是共享、只读的程序和数据,这表明/usr目录下的内容可以在多个主机间共享。
  7. /var目录:与/usr目录相反,/var目录中存放可变的数据,比如spool目录(mail,news),log文件,临时文件。
  8. /proc目录:这是一个空目录,常作为proc文件系统的挂接点,proc文件系统是个虚拟的文件系统,它没有实际的存储设备,里面的目录,文件都是由内核临时生成的,用来表示系统的运行状态,也可以操作其中的文件控制系统。
  9. /mnt目录:用于临时挂载某个文件系统的挂接点,通常是空目录
  10. /tmp目录: 用于存放临时文件,通常是空目录,一些需要生成临时文件的程序用到的/tmp目录下,所以/tmp目录必须存在并可以访问。
  11. /home目录:系统默认的用户文件夹,它是可选的,对于每个普通用户,在/home目录下都有一个以用户名命名的子目录,里面存放用户相关的配置文件。
  12. /root目录:系统管理员(root)的主文件夹,即是根用户的目录,与此对应,普通用户的目录是/home下的某个子目录。

但是对于嵌入式Linux文件系统来说,一般可能没有上面所列出的那么复杂。如嵌入式系统通常都不是针对多用户的,所以/home这个目录在一般嵌入式Linux中可能就很少用到,而/boot这个目录则取决于你所使用的BootLoader是否能够重新获得内核映象从你的根文件系统在内核启动之前。

而我们所创建的文件系统也就包括需要的几个目录:bin、dev、lib、proc、sbin、sys、usr、mnt、tmp、var

制作根文件系统

  1. 创建根文件系统的目录:
    (命令如下,有linux命令基础就可以看懂,也可以写成shell脚本,一步执行)
		mkdir rootfs
		cd rootfs
		mkdir bin dev etc lib proc sbin sys usr mnt tmp var
		make usr/bin usr/lib usr/sbin lib/modules
  1. 创建设备文件
		cd dev/
		mknod -m 666 null c 1 3
		mknod -m 666 console c 5 1 
  1. 安装/etc (把相关的/etc目录内容拷贝到自己建立的etc目录下,笔者用的是mini6410提供的etc压缩包,读者可以在网上查找到etc的压缩包)
		tar -zxvf etc.tar.gz  -C /XXX/rootfs/ 
  1. 编译内核模块
    进入linux内核目录(linux-2.6.38)
		 make modules ARCH=arm CROSS_COMPILE=arm-linux-
  1. 安装内核模块
		make modules_install ARCH=arm CROSS INSTALL_MOD_PATH=/XXX/rootfs
  1. 配置busybox (busybox是嵌入式开发中的瑞士军刀,关于busybox的介绍在补充里面)
    进入busybox目录,执行
		 make menuconfig

a.进入Busybox Setting ----> build options
配置如下:
在这里插入图片描述
exit退出:进入 Installation Options
配置如下:
在这里插入图片描述
解释说明:Don’t use /usr 选中该项可以避免busybox被安装到宿主机的/usr目录中

之后选中Busybox install prefix(设置为刚才制作的根文件系统中(该项表明编译后的busybox的安装位置))配置如上图。

  1. 编译安装busybox
    在busybox目录下,执行
		make ARCH=arm CROSS_COMPILE=arm-linux-
		make

以上为利用busybox制作的根文件系统步骤,成功后的效果如下(上边有一些早先的文件,没来得及整理)
在这里插入图片描述

busybox的buzhong补充说明

BusyBox 是一个集成了三百多个最常用Linux命令和工具的软件。BusyBox 包含了一些简单的工具,例如ls、cat和echo等等,还包含了一些更大、更复杂的工具,例grep、find、mount以及telnet。有些人将 BusyBox 称为 Linux 工具里的瑞士军刀。简单的说BusyBox就好像是个大工具箱,它集成压缩了 Linux 的许多工具和命令,也包含了 Android 系统的自带的shell。(来自360百科)
BusyBox 将许多具有共性的小版本的UNIX工具结合到一个单一的可执行文件。这样的集合可以替代大部分常用工具比如的GNU fileutils , shellutils等工具,BusyBox提供了一个比较完善的环境,可以适用于任何小的嵌入式系统。
具体介绍链接如下:
busybox介绍

猜你喜欢

转载自blog.csdn.net/qq_41782149/article/details/89281543