1)bootloader:用于启动内核。嵌入式平台的 vivi, RedBoot, u-boot 等,其中 u-boot 在使用上最广泛。
2)linux内核:
3)根文件系统:rootfs
? ? ? ? linux系统启动必须使用一个bootloader程序,即芯片上电之后必须首先启动bootloader程序。这段程序会初始化DDR等外设,然后将linux内核从flash(MMC、NOR FLASH、SD、MMC)拷贝到DDR中,最后启动linux内核。
种类 | 描述 |
uboot官网代码 | 1)uboot官网代码,更新快,基本包含所有常用芯片; 2)外设驱动不完全支持。 |
半导体芯片厂商代码 | 1)厂家维护uboot,专门针对自家芯片; 2)对自家外设驱动支持,优于uboot官网。 |
开发板厂商代码 | 1)在半导体厂商uboot基础上加入自家开发板的支持。 |
? ? ? ? 使用正点原子官方文档
? ? ? ? linux中的根文件系统更像是一个文件夹或者目录,在这个文件夹或者目录中有很多子文件夹或者子目录。在这些子文件夹或者子目录中会存在很多文件,这些文件是linux运行所必须的。比如库、常用的软件和命令、设备文件、配置文件等等。
? ? ? ? 根文件系统是linux内核启动以后挂载的第一个文件系统,然后从根文件系统中读取初始化脚本,比如rcS、inittab等等。如果不提供根文件系统,linux内核会报内核崩溃错误。
? ? ? ? 根文件系统是其他文件系统的根,没有这个 “根”,其他的文件系统或者软件不能工作。比如,我们常用的ls、mv、ifconfig等等命令本质是一个小软件,只不过没有界面。
cd / //进入根目录
?
?1)/bin目录
? ? ? ? bin文件就是可执行文件。一般是一些命令,比如ls、mv等命令。
2)/dev目录
? ? ? ? dev是device的缩写,所以此目录下的文件都是和设备有关的。此目录下的文件都是设备文件。在linux下一切接文件。比如/dev/ttymxc0(imx6ull根目录中会有这个文件)就表示imx6ull的串口0,操作串口就是操作这个文件。
3)/etc目录
? ? ? ? 存放着各种配置文件。
4)/lib目录
? ? ? ? lib是library的简称,也就是库的意思。这些库文件是共享库,命令和用户编写的应用程序要使用这些库文件。
5)/mnt目录
? ? ? ? 临时挂载目录,一般是空载目录,可以在此目录中创建空的子目录。比如/mnt/sd、/mnt/usb等,这样就可以将sd卡或者U盘挂载到相应目录中。
6)/proc目录
? ? ? ? 一般是空的,当linux启动以后会将此目录作为proc文件系统的挂载点,proc是个虚拟文件系统,没有实际的存储设备。proc里面的文件都是临时存在的,一般用来存储系统运行信息文件。
7)/usr目录
? ? ? ? usr缩写是unix software resource缩写,而不是user。存放着很多软件,一般系统安装完成以后,这个目录占用空间最多。
8)/var目录
? ? ? ? 存放着可以改变的数据
9)/sbin目录
? ? ? ? 用户存放一些可执行文件,但是此目录下的文件或者命令只能管理员才能使用,主要用户系统管理。
10)/sys目录
? ? ? ? 系统启动以后此目录作为sysfs文件系统的挂载点,sysfs是一个类似于proc文件系统的特殊文件系统,sysfs也是基于ram的文件系统,也就是说它也没有实际的存储设备。此目录是系统设备管理的重要目录,此目录会通过一定的组织结构向用户提供详细的内核数据结构信息。
11)/opt
? ? ? ? 可选的文件、软件存放区,由用户选择将哪些文件或者软件放到此目录中。? ? ? ??
? ? ? ? 通过busybox构建根文件系统,产生bin sbin usr 文件夹,以及 linuxrc这个文件。
1)bin
????????可执行文件,一般就是命令
2)sbin
? ? ? ? 管理员用的可执行文件。
3)usr
? ? ? ? 软件。
4)linuxrc文件
? ? ? ? linux 内核init进程会查找用户空间的init程序,找到以后就运行这个用户空间的intit程序,从而切换到用户态。如果bootargs设置为init = /linuxrc,这么linuxrc就可以作为用户空间的init程序,所以用户空间的init程序是由busybox来生成的。
????????
?1)添加/lib的库文件
????????自行新建lib文件夹。
? ? ? ? 从交叉编译器获取lib库文件,前面我们搭建交叉编译环境的时候将交叉编译器存放到了 “/usr/local/arm/”目录中(这个目录是正点原子的,如果是自己弄,得看自己设置)。
2)添加/usr/lib的库文件
? ? ? ? 创建/usr/lib的目录,将交叉编译器的lib库文件拷贝过去。
? ? ? ? 在根文件系统中创建其他文件夹,如dev、proc、mnt、sys、tmp、root等。
? ? ? ? 配置启动之类的。
????????