第7章_嵌入式Linux软件设计_第1页
第7章_嵌入式Linux软件设计_第2页
第7章_嵌入式Linux软件设计_第3页
第7章_嵌入式Linux软件设计_第4页
第7章_嵌入式Linux软件设计_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、 2 第第7 7章章 嵌入式嵌入式LinuxLinux软件设计软件设计 主要内容 Bootloader引导程序引导程序 Linux的移植的移植 驱动程序开发驱动程序开发 应用程序开发应用程序开发 3 第第7 7章章 嵌入式嵌入式LinuxLinux软件设计软件设计 7.1.1 7.1.1 BootloaderBootloader的启动过程的启动过程 BootLoader的实现依赖于的实现依赖于CPU的体系结构,因此大多的体系结构,因此大多 数数BootLoader都分为都分为stage1和和stage2两大部分。两大部分。 BootLoader的的stage1通常包括以下步骤:通常包括以下步骤

2、: 硬件设备初始化。硬件设备初始化。 为加载为加载BootLoader的的stage2准备准备RAM空间。空间。 复制复制BootLoader的的stage2到到RAM空间中。空间中。 设置好堆栈。设置好堆栈。 跳转到跳转到stage2的入口点。的入口点。 BootLoader的的stage2通常包括以下步骤:通常包括以下步骤: 初始化本阶段要使用的硬件设备。初始化本阶段要使用的硬件设备。 检测系统内存映射。检测系统内存映射。 将将kernel映像和根文件系统映像从映像和根文件系统映像从Flash读到读到RAM中。中。 为内核设置启动参数。为内核设置启动参数。 调用内核。调用内核。 4 第第7

3、 7章章 嵌入式嵌入式LinuxLinux软件设计软件设计 7.1.2 7.1.2 BootloaderBootloader之之vivivivi vivi是由韩国是由韩国MIZI公司提供的一款针对公司提供的一款针对S3C2410芯片的芯片的 BootLoader。 vivi的启动过程分为两个阶段:阶段的启动过程分为两个阶段:阶段1和阶段和阶段2。 阶段阶段1的主要工作是:的主要工作是: 硬件初始化;硬件初始化; 配置串口;配置串口; 复制自身到复制自身到SDRAM中中(跳转到跳转到C代码的入口函数代码的入口函数)。 阶段阶段2的主要工作是:的主要工作是: 对硬件系统继续初始化;对硬件系统继续初

4、始化; 内存映射初始化,内存管理单元内存映射初始化,内存管理单元MMU初始化;初始化; 初始化堆;初始化堆; 初始化初始化MTD设备,设备,MTD设备指具有闪存功能的设备,如闪存芯片、闪设备指具有闪存功能的设备,如闪存芯片、闪 存卡等;存卡等; 初始化私有数据;初始化私有数据; 初始化内置命令;初始化内置命令; 启动启动vivi。 5 第第7 7章章 嵌入式嵌入式LinuxLinux软件设计软件设计 主要内容 Bootloader引导程序引导程序 Linux的移植的移植 驱动程序开发驱动程序开发 应用程序开发应用程序开发 6 第第7 7章章 嵌入式嵌入式LinuxLinux软件设计软件设计 7

5、.2 7.2 LinuxLinux的移植的移植 所谓所谓Linux移植,就是针对具体的目标平台对移植,就是针对具体的目标平台对Linux做必要做必要 的改写后,安装到该目标平台并使其正确运行的过程。基本的改写后,安装到该目标平台并使其正确运行的过程。基本 内容包括:内容包括: 获取某一版本的获取某一版本的Linux内核源码。内核源码。 根据具体的目标平台,对源码进行必要的改写(主要是修改根据具体的目标平台,对源码进行必要的改写(主要是修改 有关体系结构的部分),然后添加一些驱动,打造一款适合有关体系结构的部分),然后添加一些驱动,打造一款适合 目标平台的新的操作系统。目标平台的新的操作系统。

6、对该系统进行针对目标平台的交叉编译,生成一个内核映像对该系统进行针对目标平台的交叉编译,生成一个内核映像 文件。文件。 将该映像文件烧写、安装到目标平台中。将该映像文件烧写、安装到目标平台中。 7 第第7 7章章 嵌入式嵌入式LinuxLinux软件设计软件设计 7.2.1 7.2.1 LinuxLinux内核的目录结构内核的目录结构 1 1/ /archarch:其中的子目录包含了所有与硬件体系结构相关的内核移植代码。每一其中的子目录包含了所有与硬件体系结构相关的内核移植代码。每一 个目录都代表一种硬件平台,对于每种平台都应该包括:个目录都代表一种硬件平台,对于每种平台都应该包括: boot

7、: boot:包含启动内核所使用的部分或全部平台的相关代码。包含启动内核所使用的部分或全部平台的相关代码。 kernel: kernel:包含支持体系结构特有的特征代码。包含支持体系结构特有的特征代码。 lib lib:包含存放体系结构特有的通用函数的实现代码。包含存放体系结构特有的通用函数的实现代码。 mm: mm: 包含存放体系结构特有的内存管理程序的实现。包含存放体系结构特有的内存管理程序的实现。 mach-xxx: mach-xxx:包含存放该处理器的移植代码。包含存放该处理器的移植代码。 2 2/ /DocumentationDocumentation:其中的子目录包含有关内核的许多

8、非常详细的文档。其中的子目录包含有关内核的许多非常详细的文档。 3 3/ /driversdrivers:其中的子目录包含内核中所有的设备驱动程序。其中的子目录包含内核中所有的设备驱动程序。 4 4/ /fsfs:其中的子目录包含了所有文件系统的代码。其中的子目录包含了所有文件系统的代码。 5 5/ /includeinclude:其中的子目录包含了建立内核代码时所需的大部分库文件的头文其中的子目录包含了建立内核代码时所需的大部分库文件的头文 件,该模块利用其他模块重建内核。同时,包括不同平台需要的库文件。件,该模块利用其他模块重建内核。同时,包括不同平台需要的库文件。 6 6/ /initi

9、nit:其中的子目录包含了内核的初始化代码,内核从此目录下开始工作。其中的子目录包含了内核的初始化代码,内核从此目录下开始工作。 7 7/ /ipcipc:其中的子目录包含了内核的进程间通讯的代码。其中的子目录包含了内核的进程间通讯的代码。 8 8/ /kernelkernel:其中的子目录包含了主内核的代码,如进程调度等。其中的子目录包含了主内核的代码,如进程调度等。 9 9/ /liblib:其中的子目录包含了通用的库函数代码等。其中的子目录包含了通用的库函数代码等。 1010/ /mmmm:其中的子目录包含了内核的内存管理代码。其中的子目录包含了内核的内存管理代码。 1111/ /net

10、net:其中的子目录包含了内核的网络相关代码。其中的子目录包含了内核的网络相关代码。 1212/ /scriptsscripts:其中的子目录包含了配置内核的一些脚本文件。其中的子目录包含了配置内核的一些脚本文件。 8 第第7 7章章 嵌入式嵌入式LinuxLinux软件设计软件设计 7.2.2 7.2.2 LinuxLinux内核源码内核源码 通常对内核源码的改写难度较大,因为这不仅要求对内核结构非常通常对内核源码的改写难度较大,因为这不仅要求对内核结构非常 熟悉,而且也要对目标平台的硬件结构相当了解。所以这部分工作主熟悉,而且也要对目标平台的硬件结构相当了解。所以这部分工作主 要由目标平台

11、厂商提供,如对于要由目标平台厂商提供,如对于ARMARM平台,对平台,对LinuxLinux内核源码的改写就内核源码的改写就 是由英国是由英国ARMARM公司完成的。对于读者来说,只需从其网站上下载相关公司完成的。对于读者来说,只需从其网站上下载相关 版本的版本的LinuxLinux内核补丁,再安装补丁即可。内核补丁,再安装补丁即可。 9 第第7 7章章 嵌入式嵌入式LinuxLinux软件设计软件设计 7.2.3 7.2.3 交叉编译环境的建立交叉编译环境的建立 交叉编译交叉编译指利用运行在机器上的编译器编译某个源程序,指利用运行在机器上的编译器编译某个源程序, 生成在另一台机器上运行的目标

12、代码的过程。生成在另一台机器上运行的目标代码的过程。 对于对于LinuxLinux系统和系统和ARMARM平台来讲,平台来讲,GCCGCC交叉编译器能高效的交叉编译器能高效的 完成移植,下面介绍生成完成移植,下面介绍生成GCCGCC交叉编译器的一般过程。交叉编译器的一般过程。 (1 1)下载源代码)下载源代码 (2 2)编译)编译binutils binutils (3 3)配置)配置LinuxLinux内核头文件内核头文件 (4 4)第一次编译)第一次编译gcc gcc (5 5)交叉编译)交叉编译glibcglibc (6 6)第二次编译)第二次编译gcc gcc 10 第第7 7章章 嵌

13、入式嵌入式LinuxLinux软件设计软件设计 7.2.4 7.2.4 修改修改LinuxLinux内核文件内核文件 1 1设置目标平台和指定交叉编译器设置目标平台和指定交叉编译器 2 2修改修改arch/armarch/arm目录下目录下MakefileMakefile文件文件 3 3修改修改arch/armarch/arm目录下目录下config.inconfig.in文件文件 4 4修改修改arch/arm/bootarch/arm/boot目录下目录下MakefileMakefile文件文件 5 5修改修改arch/arm/boot/compressedarch/arm/boot/co

14、mpressed目录下目录下MakefileMakefile文件文件 6 6在在arch/arm/boot/compressedarch/arm/boot/compressed目录下添加目录下添加head-head- s3c2410.ss3c2410.s文件,该文件主要用来初始化处理器。文件,该文件主要用来初始化处理器。 7 7在在arch/arm/def-configsarch/arm/def-configs目录下添加配置好的目录下添加配置好的S3C2410S3C2410 的配置文件。的配置文件。 8 8修改修改arch/arm/kernelarch/arm/kernel目录下目录下Make

15、fileMakefile文件文件 9 9修改修改arch/arm/kernelarch/arm/kernel目录下的目录下的debug-armv.sdebug-armv.s文件文件 1010修改修改arch/arm/kernelarch/arm/kernel目录下的目录下的entry-armv.sentry-armv.s文件文件 1111修改修改arch/arm/mmarch/arm/mm目录下的相关文件目录下的相关文件 1212修改修改arch/arm/mach-s3c2410arch/arm/mach-s3c2410目录下的相关文件目录下的相关文件 11 第第7 7章章 嵌入式嵌入式Lin

16、uxLinux软件设计软件设计 7.2.5 7.2.5 LinuxLinux内核及文件系统的编译内核及文件系统的编译 1 1编译编译LinuxLinux内核内核 make depmake dep make cleanmake clean make zImagemake zImage 2 2制作制作cramfscramfs文件系统文件系统 利用工具软件利用工具软件MKCRAMFSMKCRAMFS制作制作cramfscramfs文件系统。文件系统。 假设假设root_techroot_tech目录包含将来要用到的所有文件,把制目录包含将来要用到的所有文件,把制 作工具和作工具和root_techr

17、oot_tech放在同一个目录下,并在该目录下使用放在同一个目录下,并在该目录下使用 命令:命令: MKCRAMFS root_tech rootfs.cramfs MKCRAMFS root_tech rootfs.cramfs 12 第第7 7章章 嵌入式嵌入式LinuxLinux软件设计软件设计 7.2.6 7.2.6 LinuxLinux内核及文件系统的下载内核及文件系统的下载 1 1利用利用vivivivi通过超级终端重新下载通过超级终端重新下载vivivivi vivi load flash vivi xvivi load flash vivi x 2 2利用利用vivivivi烧

18、写内核和烧写内核和rootroot文件系统文件系统 vivi load flash kernel xvivi load flash kernel x vivi load flash root x vivi load flash root x 3 3利用网络烧写软件利用网络烧写软件imagewriteimagewrite烧写内核和烧写内核和rootroot文件系统文件系统 ./imagewrite /dev/mtd/0 vivi:0./imagewrite /dev/mtd/0 vivi:0 ./imagewrite /dev/mtd/0 zImage:192k./imagewrite /dev

19、/mtd/0 zImage:192k ./imagewrite /dev/mtd/0 root.cramfs:2m./imagewrite /dev/mtd/0 root.cramfs:2m 13 第第7 7章章 嵌入式嵌入式LinuxLinux软件设计软件设计 主要内容 Bootloader引导程序引导程序 Linux的移植的移植 驱动程序开发驱动程序开发 应用程序开发应用程序开发 14 第第7 7章章 嵌入式嵌入式LinuxLinux软件设计软件设计 v 设备驱动程序的工作原理设备驱动程序的工作原理 设备驱动程序是操作系统内核和机器硬件之间的接口。设设备驱动程序是操作系统内核和机器硬件之间

20、的接口。设 备驱动程序为应用程序屏蔽了硬件的细节备驱动程序为应用程序屏蔽了硬件的细节, 应用程序可以像应用程序可以像 操作普通文件一样对硬件设备进行操作。操作普通文件一样对硬件设备进行操作。 设备驱动程序作为内核的一部分设备驱动程序作为内核的一部分,完成以下功能完成以下功能: 对设备初始化和释放;对设备初始化和释放; 把数据从内核传送到硬件和从硬件读取数据;把数据从内核传送到硬件和从硬件读取数据; 读取应用程序传送给设备文件的数据和回送应用程序请读取应用程序传送给设备文件的数据和回送应用程序请 求的数据;求的数据; 检测和处理设备出现的错误。检测和处理设备出现的错误。 Linux下的设备驱动程

21、序是内核的一部分下的设备驱动程序是内核的一部分,运行在内核模运行在内核模 式。在式。在Linux系统中,使用系统中,使用file_operation结构结构将设备驱动将设备驱动 程序和文件系统相关联程序和文件系统相关联,在这个结构里存放了设备各种操作在这个结构里存放了设备各种操作 的入口函数。的入口函数。 15 第第7 7章章 嵌入式嵌入式LinuxLinux软件设计软件设计 v LinuxLinux下设备驱动程序在输入下设备驱动程序在输入/ /输出系统中的地位输出系统中的地位 用户程序的进程用户程序的进程 (设备)文件系统(设备)文件系统 设备驱动程序设备驱动程序 设备服务子程序设备服务子程

22、序 中断处理程序中断处理程序 物理设备控制器物理设备控制器 输入输入/输出输出 请求请求 输入输入/输出输出 响应响应 物理设备物理设备 16 第第7 7章章 嵌入式嵌入式LinuxLinux软件设计软件设计 v 驱动程序的开发和使用步骤驱动程序的开发和使用步骤 1 1用户在自己的驱动程序源文件中定义用户在自己的驱动程序源文件中定义file_operationsfile_operations结构结构, ,并编写并编写 出设备需要的各个操作函数,对于设备不需要的操作函数用出设备需要的各个操作函数,对于设备不需要的操作函数用NULLNULL初始化;初始化; 2 2定义一个初始化函数,该函数应包含以

23、下几项工作:定义一个初始化函数,该函数应包含以下几项工作: (1 1)对使用到的硬件寄存器进行初始化,包括中断寄存器。)对使用到的硬件寄存器进行初始化,包括中断寄存器。 (2 2)初始化与设备相关的参数。)初始化与设备相关的参数。 (3 3)注册设备。)注册设备。 int register_chrdev(unsigned int,const charint register_chrdev(unsigned int,const char* *,struct file_operations,struct file_operations* *) ) 其中三个参数分别代表主设备号、设备名和其中三个参数

24、分别代表主设备号、设备名和file_operationsfile_operations结构变量结构变量 的地址的地址。 (4 4)注册设备使用的中断。注册中断使用的函数。)注册设备使用的中断。注册中断使用的函数。 (5 5)其他的一些初始化工作,比如给设备分配)其他的一些初始化工作,比如给设备分配I/OI/O,申请申请DMADMA通道等。通道等。 3 3将设备驱动加到将设备驱动加到LinuxLinux内核中内核中 4 4将设备驱动编译成驱动模块将设备驱动编译成驱动模块 17 第第7 7章章 嵌入式嵌入式LinuxLinux软件设计软件设计 主要内容 Bootloader引导程序引导程序 Lin

25、ux的移植的移植 驱动程序开发驱动程序开发 应用程序开发应用程序开发 18 第第7 7章章 嵌入式嵌入式LinuxLinux软件设计软件设计 v 应用程序的开发步骤应用程序的开发步骤 开发开发Linux应用程序一般分为以下几个步骤:应用程序一般分为以下几个步骤: 编写程序编写程序 编写编写Makefile文件文件 编译程序编译程序 运行程序运行程序 将生成的可执行文件加入文件系统。将生成的可执行文件加入文件系统。 如果应用程序的运行需要某些驱动程序,先将驱动程序如果应用程序的运行需要某些驱动程序,先将驱动程序 挂接到文件系统中。挂接到文件系统中。 19 第第7 7章章 嵌入式嵌入式LinuxLinux软件设计软件设计 v 举例:举例:hellohello应用程序的开发和运行应用程序的开发和运行 1. 1. 编写编写HelloHello程序程序 编写编写hello.chello.c文件,保存在文件,保存在hellohello目录下。代码如下所示:目录下。代码如下所示: # #include i

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论