物联网软件开发公司 Linux系统下rootfs根文献系统制作及挂载设施
发布日期:2024-11-06 06:45 点击次数:108
放弃一场大满贯,这样的决定肯定很奇怪,然而莱克西-汤普森不是第一个这么做的人,与此同时,她也不是最高等级的选手。
根文献系统构建好以后就意味着咱们仍是领有了一个齐全的、不错运行的最小系统。以后咱们就在这个最小系统上编写、测试 Linux 驱动,移植一些第三方组件,从容的完善这个最小系统。最终获得一个功能完善、驱动皆全、相对完善的操作系统。1. 根文献系统简介根文献系合伙般也叫作念 rootfs,那么什么叫根文献系统?看到“文献系统”这四个字,好多东谈主,包括我第一反映等于 FATFS、 FAT、 EXT4、 YAFFS 和 NTFS 等这样的文献系统。在这里,根文献系统并不是 FATFS 这样的文献系统代码, EXT4 这样的文献系统代码属于 Linux 内核的一部分。 Linux 中的根文献系统更像是一个文献夹轻视叫作念目次(在我看来等于一个文献夹,只不外是格外的文献夹),在这个目次内部会有好多的子目次。根目次下和子目次中会有好多的文献,这些文献是 Linux 运行所必须的,比如库、常用的软件和高歌、确立文献、配置文献等等。以后咱们说到文献系统,如果无间顶指明,合伙暗示根文献系统。关于根文献系统专科的解说,百度百科上是这样说的。
根文献系统治先是内核启动时所 mount(挂载)的第一个文献系统,内核代码映像文献保存在根文献系统中,而系统指引启动法子会在根文献系统挂载之后从中把一些基本的运行化剧本和管事等加载到内存中去运行。
百度百科上说内核代码镜像文献保存在根文献系统中,然则咱们镶嵌式 Linux 并莫得将内核代码镜像保存在根文献系统中,而是保存到了其他方位。比如 NAND Flash 的指定存储地址、EMMC 专用分区中。 根文献系统是 Linux 内核启动以后挂载(mount)的第一个文献系统,然后从根文献系统中读取运行化剧本,比如 rcS, inittab 等。根文献系统和 Linux 内核是分开的,单独的 Linux 内核是没法泛泛职责的,必须要搭配根文献系统。如果不提供根文献系统, Linux 内核在启动的工夫就会教唆内核崩溃(Kernel panic)的教唆。
根文献系统的这个“根”字就评释了这个文献系统的普遍性,它是其他文献系统的根,莫得这个“根”,其他的文献系统轻视软件就别念念职责。比如咱们常用的 ls、 mv、 ifconfig 等高歌其实等于一个个小软件,只是这些软件莫得图形界面,并且需要输入高歌来运行。这些小软件就保存在根文献系统中,这些小软件是怎样来的呢?这个等于咱们本章教程的主义,教环球来构建我方的根文献系统,这个根文献系统是抖擞 Linux 运行的最小根文献系统,后续咱们不错字据我方的实质职责需求束缚的去填充这个最小根文献系统,最终使其成为一个相对完善的根文献系统。
根文献系统的接纳和配置关于操作系统的性能、功能和可靠性都具有普遍影响。不同的垄断场景和需求可能需要定制化的根文献系统,以抖擞特定的条目。因此,根文献系统的策动妥协决是操作系统拓荒和系统解决的普遍方面之一。
2. 根文献系统构建软件构建根文献系统常用的软件有三种,辨认是busybox,buildroot,yocto。 busybox 只是只是帮咱们构建好了一些常用的高歌和文献,像 lib 库、/etc 目次下的一些文献都需要咱们我方手动创建,并且 busybox 构建的根文献系统默许莫得用户名和密码成立。在后续的践诺中,咱们还要我方去移植一些第三方软件和库,比如 alsa、iperf、mplayer 等等。那么有莫得一种傻瓜式的设施或软件,它不仅包含了 busybox 的功能,并且内部还集成了多样软件,物联网软件开发公司需要什么软件就接纳什么软件,不需要咱们去移植。谜底确定是有的,buildroot 等于这样一种用具,buildroot比 busybox 更进一竿,buildroot 不仅集成了 busybox,并且还集成了多样常见的第三方库和软件,需要什么就接纳什么,就跟咱们去吃自助餐相通,念念吃什么就拿什么。buildroot 极大的便捷了咱们镶嵌式 Linux 拓荒东谈主员构建实用的根文献系统。
从 busybox 脱手一步一步的构建根文献系统合适学习、了解根文献系统的构成,然则不合适作念居品(主若是我方构建的话会有好多不完善、莫得细巧到的细节)。buildroot 会帮咱们处理好多样细节,根文献系统也会愈加的合理、有用。因此在作念居品的工夫保举环球使用 buildroot 来构建我方的根文献系统,诚然了,访佛 buildroot 的软件还有好多,比如后头要讲的 yocto。
buildroot 和 uboot、Linux Kernel 很访佛,咱们需要到其官网落魄载源码,然后对其进行配置,比如成立交叉编译器、成立主义 CPU 参数等,最主要的等于接纳所需要的第三方库或软件。一切配置好以后就不错进行编译,编译完成了以后就会在一个文献夹内部存放好编译效果,也等于根文献系统。
app3. busybox构建根文献系统3.1 BusyBox 简介其名字分为“Busy”和“Box”,也等于沉重的盒子。盒子是用来放东西的,沉重的是因为它要提供根文献系统所需的文献,是以沉重。 BusyBox 是一个集成了无数的 Linux 高歌和用具的软件,像 ls、 mv、 ifconfig 等高歌 BusyBox 都会提供。 BusyBox 等于一个大的用具箱,这个用具箱内部集成了 Linux 的许多用具和高歌。一般下载 BusyBox 的源码,然后配置 BusyBox,接纳我方念念要的功能,临了编译即可。
BusyBox 官网下载地址为:
https://busybox.net/
登录官网咱们不错看到,界面相当的精真金不怕火:
图片
在官网左侧的“Get BusyBox”栏有一转“Download Source”,点击“Download Source”即可掀开 BusyBox 的下载页,如下所示:
图片
从上头不错看出,当今最新的 BusyBox 版块是 1.36.1,不外本次不研讨使用最新的版块进行构建,接纳一个相比新的就行,本次接纳的是 busybox-1.32.0.tar.bz2。 BusyBox 下载好以后咱们就脱手构建根文献系统了。
3.2 编译 BusyBox 构建根文献系统busybox的编译构建经由:
使用make menuconfig构建出图形配置界面。
通过配置图形配置界面的选项配置busybox的安设旅途、编译用具、高歌功能使能等。生成.config配置文献
使用make编译busybox
使用make install高歌安设由busybox生成的根文献系统
完善根文献系统
使用和测试根文献系统
1.创建文献夹保存根文献系统
mkdir rootfs
2.解压BusyBox压缩包到rootfs目次
tar -jxvf busybox-1.32.0.tar.bz2
3.修改 Makefile,添加编译器
# Cross compiling and selecting different set of gcc/bin-utils # --------------------------------------------------------------------------- # # When performing cross compilation for other architectures ARCH shall be set # to the target architecture. (See arch/* for the possibilities). # ARCH can be set during invocation of make: # make ARCH=ia64 # Another way is to have ARCH set in the environment. # The default ARCH is the host where make is executed. # CROSS_COMPILE specify the prefix used for all executables used # during compilation. Only gcc and related bin-utils executables # are prefixed with $(CROSS_COMPILE). # CROSS_COMPILE can be set on the command line # make CROSS_COMPILE=ia64-linux- # Alternatively CROSS_COMPILE can be set in the environment. # Default value for CROSS_COMPILE is not to prefix executables # Note: Some architectures assign CROSS_COMPILE in their arch/*/Makefile CROSS_COMPILE ?= arm-linux-gnueabihf- # bbox: we may have CONFIG_CROSS_COMPILER_PREFIX in .config, # and it has not been included yet... thus using an awkward syntax. ifeq ($(CROSS_COMPILE),) CROSS_COMPILE := $(shell grep ^CONFIG_CROSS_COMPILER_PREFIX .config 2>/dev/null) CROSS_COMPILE := $(subst CONFIG_CROSS_COMPILER_PREFIX=,,$(CROSS_COMPILE)) CROSS_COMPILE := $(subst ",,$(CROSS_COMPILE)) #") endif # SUBARCH tells the usermode build what the underlying arch is. That is set # first, and if a usermode build is happening, the "ARCH=um" on the command # line overrides the setting of ARCH below. If a native build is happening, # then ARCH is assigned, getting whatever value it gets normally, and # SUBARCH is subsequently ignored. ifneq ($(CROSS_COMPILE),) SUBARCH := $(shell echo $(CROSS_COMPILE) | cut -d- -f1 | sed 's:^.*/::g') else SUBARCH := $(shell uname -m) endif SUBARCH := $(shell echo $(SUBARCH) | sed -e s/i.86/i386/ -e s/sun4u/sparc64/ -e s/arm.*/arm/ -e s/sa110/arm/ -e s/s390x/s390/ -e s/parisc64/parisc/ -e s/ppc.*/powerpc/ -e s/mips.*/mips/ ) ARCH ?= arm
修改“CROSS_COMPILE ?=”和“ARCH ?= arm”这两行内容,修改如上代码。
3.3 busybox中翰墨符支柱使用 busybox 默出嫁置径直编译的话,使用 SecureCRT 的工夫中翰墨符是走漏不泛泛的,中翰墨符会走漏为“?”,比如你的汉文目次,汉文文献都走漏为“?”。这是因为 busybox 中的 shell 高歌对汉文输入即走漏作念了适度,是以咱们需要对 busybox 源码进行修改,取消 busybox 对汉文走漏的适度,底下咱们来一步步修改busybox使其支柱汉文。
3.3.1 修改printable_string2函数掀开文献 busybox-1.32.0/libbb/printable_string.c,找到函数 printable_string2,函数具体内容如下:
const char* FAST_FUNC printable_string2(uni_stat_t *stats, const char *str) { char *dst; const char *s; s = str; while (1) { unsigned char c = *s; if (c == '\0') { /* 99+% of inputs do not need conversion */ if (stats) { stats->byte_count = (s - str); stats->unicode_count = (s - str); stats->unicode_width = (s - str); } return str; } if (c < ' ') break; if (c >= 0x7f) break; s++; } #if ENABLE_UNICODE_SUPPORT dst = unicode_conv_to_printable(stats, str); #else { char *d = dst = xstrdup(str); while (1) { unsigned char c = *d; if (c == '\0') break; if (c < ' '