嵌入式Linux系统的构建
一、嵌入式Linux系统中的典型分区结构
Boot parameters
Bootload
Root filesystem
Kernel
二、各个结构的分析
1、从咱们所学的硬件知识能够明白,在系统上电后需要一段程序来进行初始化(关闭WATCHDOG、改变系统时钟、初始化存储器操纵器、将更多的代码复制到内存中)。简单的说bootload确实是这么一段小程序(相当于PC机中的BIOS),初始化硬件设备、预备好软件环境,最后挪用操作系统内核。从某个观点上来看Bootload能够分为两种操作模式:启动模式和下载模式。
启动模式:上电后bootload从板子上的某个固态存储器上将操作系统加载到RAM中运行,整个进程并无效户的介入
下载模式:在这种模式下,开发人员能够利用各类命令,通过串口连接或网络连接等通信手腕从主机下载文件,将它们直接放在内存运行或是烧入Flash类固态存储设备中。
Bootload能够分为两个时期:
第一时期实现的功能:硬件设备初始化、为加载Bootload的第二时期代码预备RAM空间、复制Bootload的第二时期代码到RAM空间中、设置好栈、跳转到第二时期代码的C入口点
第二时期:初始化本时期要利用的硬件设备、检测系统内存映射、将内核镜像和根文件映
像从Flash上读到RAM空间中、为内核设置启动参数、挪用内核
2、内核的结构:
Linux内核文件数量快要2万,除去其他构架CPU的相关文件,支持S3C2410、S3C2440这两款芯片的完整内核文件有1万多个。这些文件组织结构并非复杂,他们别离位于顶层目录下的17个子目录,各个目录功能独立
目录名 | 描述 |
arch | 体系结构相关的代码 |
block | 块设备的通用函数 |
crypto | 常用加密和散列算法,还有一些压缩和CRC校验算法 |
Drivers | 所有的设备驱动程序,里面的每一个子目录对应一类驱动程序 |
fs | Linux支持的文件系统的代码,每个子目录对用一种文件系统 |
Include | 内核头文件(基本头文件、驱动或功能部件头文件等) |
Init | 内核的初始化代码(不是系统的引导代码) |
Ipc | 进程间通信的代码 |
Kernel | 内核管理的核心代码 |
lib | 内核用到的一些库函数代码 |
Mm | 内存管理代码 |
Net | 网络支持代码,每个子目录对应于网络的一个方面 |
Security | 安全、密钥、相关代码 |
Sound | 音频设备的驱动程序 |
Ulinux内核文件放在哪sr | 用来制作一个压缩的cpio归档文件:initrd的镜像,他可以作为内核启动后挂接的第一个文件系统 |
Documentation | 内核文档 |
Scripts | 用于配置、编译内核的脚本文件 |
Linu内核Makefile文件分类
名称 | 描述 |
顶层Makefile | 他是所有Makefile文件的核心,从总体上控制着内核的编译、连接 |
.config | 配置文件,在配置内核时生成。所有Makefile文件都是根据.config来决定使用哪些文件 |
Arch/Makefile | 对应体系结构的Makefile,它用来决定哪些体系结构相关的文件参与内核的生成,并提供一些规则来生成特定格式的内核镜像 |
Scripts/Makefile | Makefile公用的通用规则、脚本等 |
Kbuild Makefile | 各级目录下的Makefile,它们相对简单,被上一层Makefile调用编译当前目录下的文件 |
3、根文件系统
嵌入式 Linux 中都需要构建根文件系统,构建根文件系统的规那么在FHS(FilesystemHierarchy Standard)文档中,下面是根文件系统顶层目录。
三、根文件系统的制作
一、进入到/opt/studyarm 目录,新建成立根文件系统目录的脚本文create_rootfs_bash,利用命令chmod +x create_rootfs_bash 改变文件的可执行限,./create_rootfs_bash 运行
脚本,就完成了根文件系统目录的创建。create_rootfs_bash的内容为
#!/bin/sh
echo "------Create rootfs --------"
mkdir rootfs
cd rootfs
echo "--------Create ----------"
mkdir root dev etc boot tmp var sys proc lib mnt home
mkdir etc/ etc/ etc/sysconfig
mkdir usr/sbin usr/bin usr/lib usr/modules
echo "make node in dev/console dev/null"
mknod -m 600 dev/console c 5 1
mknod -m 600 dev/null c 1 3
mkdir mnt/etc mnt/jffs2 mnt/yaffs mnt/data mnt/temp
mkdir var/lib var/lock var/run var/tmp
chmod 1777 tmp
chmod 1777 var/tmp
echo "-------make direction done---------"
二、成立动态链接库:动态链接库直接用友善之臂的,先解压友善之臂的根文件包,拷贝 lib 的内容到新建的根文件目录lib 内。
3、修改busybox目录下的Makefile文件
CROSS_COMPILE =arm-linux- _install) BusyBox installation prefix
Busybox Library Tuning --->
(6)Minimum password legth
(2)MD5:Trade Bytes for Speed
[*]Fsater /proc scanning code(+100bytes)
[*]Command line editing
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论