1、构建嵌入式Linux系统,课程安排,嵌入式Linux系统架构 嵌入式Linux系统启动过程 建立Uboot源码工程 建立Linux内核源码工程,嵌入式Linux系统,软硬件架构,开发流程-1,硬件开发责任人:硬件工程师责任:基于EVM板,添加、修改、删除硬件,开发流程-2,引导程序移植责任人:系统工程师责任:将Bootloader移植到硬件平台,开发流程-3,Linux内核移植责任人:系统工程师责任:将Linux内核移植到硬件平台,开发流程-4,根文件系统制作责任人:系统工程师责任:制作供内核启动的根文件系统,开发流程-5,业务功能实现,责任人:应用工程师责任:开发和产品密切相关的应用程序如:
2、界面、通信,责任人:驱动工程师责任:开发和产品密切相关的驱动程序如:触摸屏、WIFI,开发流程-6,功能测试性能测试系统集成测试用户端实验测试发布,嵌入式Linux系统软件,一个嵌入式Linux系统软件为什么要分为:BootloaderLinux内核根文件系统应用程序这就要先了解嵌入式Linux系统的启动过程,课程安排,嵌入式Linux系统架构 嵌入式Linux系统启动过程 建立Uboot源码工程 建立Linux内核源码工程,PC与嵌入式启动对比,BIOS,操作系统:Windows,识别分区:C/D等盘,执行应用程序:QQ等,Bootloader:uboot,Linux内核,挂接根文件系统,执
3、行应用程序:Qt界面等,PC机系统,嵌入式系统,嵌入式Linux软件层次,嵌入式Linux软件层次,嵌入式产品通常使用便携性、防震性优越(对比PC的硬盘)的NAND FLASH(U盘介质)作为永久(固态)存储设备嵌入式Linux系统的NAND FLASH通常存储布局:,嵌入式Linux软件层次,系统上电或者复位后,所有的CPU通常都从CPU制造商预先安排的地址开始执行代码S3C6410复位后自动从固态存储设备最前端拷贝代码到内存的0x00000000地址开始执行烧写NAND FLASH时将Bootloader安排在最前端,这样就能保证CPU上电后首先执行Bootloader引导程序,嵌入式Li
4、nux系统刷机,刷机目的:更新开发板固件(Nand Flash)上的系统软件: bootloader、内核映像、根文件系统,与安装PC系统对比,光盘引导 SD卡Bootloader PC机 开发板 Windows Linux 安装完成后直接从硬盘启动安装完成后直接从Nand Flash启动,刷机准备,在SD卡上制作启动盘:通过SD卡烧写软件将bootloader烧写到SD卡,刷机准备,准备安装映像:启动引导程序、Linux内核映像、根文件系统,两种刷机模式,1、通过USB手动安装2、从SD卡自动安装(完全模拟光盘安装,需要预先在SD卡放入所需系统),手动安装,安装前准备: 1、连接USB线,并
5、安装USB下载驱动2、启动DNW,显示USB连接“OK”,手动安装,手动安装Linux,步骤: 1、格式化Nand Flash 2、安装Bootloader 3、安装Linux内核 4、安装文件系统,自动安装,自动安装Linux,步骤: 1、将image拷贝到SD卡 2、修改ini文件为OS=Linux 3、上电开机 4、“滴”一声开始 5、“滴滴”两声安装完毕,课程安排,嵌入式Linux系统架构 嵌入式Linux系统启动过程 建立Uboot源码工程 建立Linux内核源码工程,什么是Uboot,源码下载,目录结构,目录结构,目录结构,目录结构,目录结构,建立源码工程,1、利用source i
6、nsight工具建立Uboot源码工程 2、注意board、cpu、lib只选择开发板平台相关目录(先增加所有文件,再剔除不相关目录文件) 3、注意增加相关汇编启动文件(start.S)、Makefile文件与链接脚本文件(U-boot.lds),课程安排,嵌入式Linux系统架构 嵌入式Linux系统启动过程 建立Uboot源码工程 建立Linux内核源码工程,Linux内核简介,linux内核是用C语言编写的一个庞大系统软件,是linux操作系统的核心;Linux内核是开源的,具有模块化 ,用户可以根据自己的需要来定制、完善内核,并与其他人共享更新后的源码;linux内核最新的版本是2.6
7、.* uname a 显示系统版本,Linux内核架构,系统调用接口,SCI 层为用 户空间提供了一套标准的系统调用函数来访问 Linux内核搭起了用户空间到内核空间的桥梁。,ARCH,ARCH:体系结构相关代码 让CPU、板级相关的代码单独提取出来,使得Linux内核方便在不同硬件平台上移值,进程管理,进 程管理 的重点是创建进 程( fork、exec) , 停止 进程( kill、 exit)并控制它们之间的通信( signal 或者 POSIX 机 制)。进 程管理还包括控 制 活动进 程如何共享 CPU, 即进程调度。,内存管理,内存管理的主要作用是控制多个进程安全 地共享内存区域。
8、内存管理是决定系统性能的重要要素。,网络协议栈,内核协议栈为Linux提供了丰富的网络协议实现。应用层序通过内核中的网络协议栈高效地访问网络设备。网络系统所一共的安全性和加密功能增强了系统的可靠性。,虚拟文件系统(VFS),VFS隐藏各 种文 件系统 的具体细节,为 文件操作提供 统一的接口。,设备驱动,应用程序必须得到硬件的支持才能完成各种操作,设备驱动程序负责与硬件相关的各种操作。Linux 内核中有大量代码都在设备驱动程序中,它们控制特定的硬件设备。设备驱动程序的设计遵循文件系统的结构,应用层通过统一的文件接口来访问和控制硬件设备。,内核源码,linux内核源代码采用树形结构进行组织,非
9、常合理地把功能相关的文件都放在同一个子目录下,使得程序更具可能性。内核源代码下载地址:www.kernel.org,内核目录树展示,Linux2.6内核目录结构,目录结构,arch arch是 architecture的 缩写 。内核所 支持的每 种 CPU体系,在该目录 下都有对 应的子目录。 每 个 CPU的 子目录 ,又进一 步分解为 boot,mm,kernel等 子目录 ,分别 包含 控制 系统引导,内存 管理 , 系统调用 等代码,目录结构,arch/arm:ARM核CPU及与之相兼容体系结构的子目录 mach-*: 板级体系结构代码(代表某款开发板/评估板) tools:生成压缩
10、内核映像的程序 kernel 相关内核特性实现方 式,如信号处理、时钟处理 lib:硬件相关工具函数 Boot:引导程序,目录结构,block目录:部分块设备驱动程序crypto目录:加密、压缩、 CRC校验算法Documentation:内核的文 档drivers目录:设备驱动程序,目录结构,fs目录存放各种 文件系统的实现代码 。每个 子目录对应 一种文 件 系统的实现,公用的源 程序用 于实现 虚拟文 件系统 vfs。 devpts:/dev/pts虚拟文 件系统 ext2: 第二扩展文 件系统 fat:MS的 fat32文 件系统 isofs:ISO9660光盘 cd-rom上的文 件
11、系统 include目录 内核所需要的头文件。与平台无关的头文件在 include/linux 子目录下 与平台相关的头文件则放在相应的子目录中 。,目录结构,init目录:内核初始化代码ipc目录:进程间通信的实现代码kernel目录:Linux大多数关键的核心功能都是在这个目录实现。 (调度程序,进程控制,模块化),目录结构,lib目录:库文件代码编译产生库文件mm目录:mm目录中 的文件用 于实现内存管理中与体系结构无关的部分(与体系结构相关的部分在哪里实现?)arch,目录结构,net目录:网络协议的实现代码 802: 802无线通讯协议核心支持 代码 appletalk:与苹果系统连网的协议 ax25: AX25无线INTERNET协议 bridge:桥接设备 ipv4: IP协议族 V4版 32位寻址模式 ipv6: IP协议族 V6版,目录结构,samples一 些内核编程的范例scripts配置内核的脚本securitySElinux的 模块,目录结构,sound音 频设备 的驱动 程序usrcpio命 令实现virt内核虚拟机,建立源码工程,1、利用source insight工具建立Linux2.6内核源码工程 2、注意arch、include只选择开发板平台相关目录(先增加所有文件,再剔除不相关目录文件),