嵌入式Linux设备驱动程序开发指南2(构建系统概要)——读书笔记

构建系统概要

  • 二、构建系统概要
  • 2.1 引导加载程序
  • 2.2 Linux内核
  • 2.3 系统调用接口和c运行时库、系统共享库
  • 2.4 根文件系统
  • 2.5 嵌入式ARM处理器启动过程
  • 2.6 构建嵌入式Linux系统

二、构建系统概要

2.1 引导加载程序

常用加载程序使用功能强大的U-boot,实现配置系统内存、在正确地址加载内核映像和设备树、在正确的地址加载内存磁盘设备、设置的命令行和设置内核启动参数。
U-boot是ARM-Linux的主要引导加载器,U-boot主线代码位于:

git.denx.de/u-boot.git

Wiki上有关U-boot介绍:

www.denx.de/wiki/U-Boot/SourceCode

U-boot主要特性:
尺寸小、启动快、可移植、可配置、可调式。

2.2 Linux内核

Linux是由Linux Torvalds主笔形成。

2.3 系统调用接口和c运行时库、系统共享库

有三个概念要讲清楚:系统调用接口、c运行时库、系统共享库。
系统调用接口
系统调用接口指的是应用程序和内核之间的接口。

c运行时库

c运行时库,又名标准c库,有几种标准c运行时库如:
glibc、uClibc、eglibc、dietlibc、newlib. 
c运行时库提供以下功能:定义宏、类型、字符串处理函数、数学运算函数、输入输出处理、内存分配和与操作系统服务相关功能。

系统共享库
系统共享库是程序启动时预加载的库,如:

lib(系统启动需要的库)
/usr/lib(大部分系统库)
usr/local/lib(非系统库)
libc(标准c库)
libm(数学库)
libdl(动态链接库)
libpthread(POSIX线程库)

2.4 根文件系统

所有二进制文件、应用程序、数据都放在 / 根目录。

2.5 嵌入式ARM处理器启动过程

启动过程分bootRom加载、SPL(U-boot)、内核、文件系统执行第一个用户进程。
嵌入式Linux设备驱动程序开发指南2(构建系统概要)——读书笔记_第1张图片

第一步:
启动的第一步是上电复位(POR),硬件复位逻辑强制 执行 ARM核心从片上ROM,判断启动模式选择(BMS)引脚来判断,扫描不同媒介设备,例如串行闪存、NAND闪存、SD/eMMC卡,和串行EEPROM。如Microchip SAMA5D2会从NAND闪存上读取AT91Bootstrap二级引导程序,管理硬件、时钟和DRAM初始化。AT91Bootstrap将会从NAND闪存获取U-boot,并存入到DDR RAM.

第二步:
运行已经搬移到到DDR RAM的U-boot程序。U-boot将内核映像和已编译好的设备树二进制文件加载到RAM,并将设备树种的内存地址作为内核启动参数取出,配合内核完成内核启动。随后从U-boot跳转到内核。

第三步:
内核执行初始化MMU、设置缓存,代码是在:

/arch/arm/kernel/head.s

随后,切换到与体系无关的函数:start_kernel() 该函数负责以下内容:
初始化内核模块,包括内存、中断、任务调度;

根据U-boot传递到内核的启动参数挂载根文件系统;

第四步:
执行第一个用户进程/sbin/init.

2.6 构建嵌入式Linux系统

首先,搭建交叉编译工具链;
其次,准备软件包,包含引导加载程序、内核和根文件系统;
然后,配置并且构建软件包;
最后,将构建的系统部署到目标板。

三种方式构建系统:

*手动构建,较为辛苦!
*下载使用完全发行版,如Ubuntu、Debian
*使用构建框架,如buildroot、Yocto. 这种方式很容易定制化,流行于嵌入式Linux领域,构建框架包含系统所需的所有软件组件的下载、配置、编译、安装,它满足定制根文件系统的要求。构建框架输出完整的映像文件。

感谢阅读,祝君成功!
-by aiziyou

你可能感兴趣的:(linux驱动,linux,驱动程序)