嵌入式Linx知识培训

上传人:仙*** 文档编号:48561724 上传时间:2022-01-12 格式:PPT 页数:34 大小:127KB
收藏 版权申诉 举报 下载
嵌入式Linx知识培训_第1页
第1页 / 共34页
嵌入式Linx知识培训_第2页
第2页 / 共34页
嵌入式Linx知识培训_第3页
第3页 / 共34页
资源描述:

《嵌入式Linx知识培训》由会员分享,可在线阅读,更多相关《嵌入式Linx知识培训(34页珍藏版)》请在装配图网上搜索。

1、嵌入式嵌入式Linux知识培训知识培训主要包括以下四部分内容:主要包括以下四部分内容:一、嵌入式一、嵌入式Linux开发的基本知识开发的基本知识二、二、Linux下使用下使用C语言进行系统开发语言进行系统开发三、面向嵌入式三、面向嵌入式Linux的的GUI系统的体系结构及二次开发系统的体系结构及二次开发四、基于四、基于Linux OS Smart Phone的体系结构及开发内容的体系结构及开发内容李玉东李玉东第一部分第一部分基础知识基础知识嵌入式嵌入式Linux有关知识培训(基础部分)有关知识培训(基础部分)嵌入式嵌入式Linux软件系统的构成软件系统的构成1.BootLoader2. Ker

2、nel3.FileSystem4.GUI5.Application嵌入式嵌入式Linux有关知识培训(基础部分)有关知识培训(基础部分)嵌入式嵌入式Linux系统的构成系统的构成(BootLoader)1.PC机的系统引导过程机的系统引导过程系统加电系统加电跳转到固定地址跳转到固定地址BIOSMBRKernel2.嵌入式系统中的嵌入式系统中的bootloader与与PC机的引导程序是类似的机的引导程序是类似的系统加电系统加电跳转到固定的地址跳转到固定的地址读入读入bootloader程序程序初始化系统初始化系统加载加载kernel,将系统的控制权转到,将系统的控制权转到kernel.3.boo

3、tloader与机器硬件紧密相关。与机器硬件紧密相关。4.有一定通用性的有一定通用性的bootloader程序程序uboothttp:/ Creating 4 MTD partitions on PXA Cerf Flash:0 x00000000-0 x00040000 : Bootloader0 x00040000-0 x000c0000 : Partition Tables0 x000c0000-0 x001c0000 : Kernel0 x001c0000-0 x02000000 : Filesystem嵌入式嵌入式Linux有关知识培训(基础部分)有关知识培训(基础部分)Multi

4、Stage BootLoader 由于由于 Boot Loader Boot Loader 的实现依赖于的实现依赖于 CPU CPU 的体系结构,因的体系结构,因此大多数此大多数 Boot Loader Boot Loader 都分为都分为 stage1 stage1 和和 stage2 stage2 两大部两大部分。分。 依赖于依赖于 CPU CPU 体系结构的代码,比如设备初始化代码等,体系结构的代码,比如设备初始化代码等,通常都放在通常都放在 stage1 stage1 中,而且通常都用汇编语言来实现,以中,而且通常都用汇编语言来实现,以达到短小精悍的目的。达到短小精悍的目的。 而而 s

5、tage2 stage2 则通常用则通常用C C语言来实现,这样可以实现给复杂语言来实现,这样可以实现给复杂的功能,而且代码会具有更好的可读性和可移植性的功能,而且代码会具有更好的可读性和可移植性。 嵌入式嵌入式Linux有关知识培训(基础部分)有关知识培训(基础部分)BootLoader Stage1 Boot Loader 的的 stage1 通常包括以下步骤通常包括以下步骤(以执行的先后顺序以执行的先后顺序):硬件设备初始化。硬件设备初始化。为加载为加载 Boot Loader 的的 stage2 准备准备 RAM 空间。空间。拷贝拷贝 Boot Loader 的的 stage2 到到

6、RAM 空间中。空间中。设置好堆栈。设置好堆栈。跳转到跳转到 stage2 的的 C 入口点。入口点。嵌入式嵌入式Linux有关知识培训(基础部分)有关知识培训(基础部分)BootLoader Stage2 Boot Loader 的的 stage2 通常包括以下步骤:通常包括以下步骤:初始化本阶段要使用到的硬件设备。初始化本阶段要使用到的硬件设备。检测系统内存映射检测系统内存映射(memory map)。将将 kernel 映像和根文件系统映像从映像和根文件系统映像从 flash 上读到上读到 RAM 空间空间中。中。为内核设置启动参数。为内核设置启动参数。调用内核。调用内核。 嵌入式嵌入式

7、Linux有关知识培训(基础部分)有关知识培训(基础部分)BootLoader 调用内核调用内核 Boot Loader 调用调用 Linux 内核的方法是直接跳转到内内核的方法是直接跳转到内核的第一条指令处开始执行核的第一条指令处开始执行 如果系统显示如果系统显示Uncompressing Linux. done, booting the kernel.说明说明Bootloader已成功加载了已成功加载了kernel,Kernel开始启动开始启动嵌入式嵌入式Linux有关知识培训(基础部分)有关知识培训(基础部分) 嵌入式嵌入式Linux有关知识培训(基础部分)有关知识培训(基础部分)Ker

8、nel 启动过程启动过程 检查检查root device mount root file system. 如果如果root file system中,中,/linuxrc存在的话,就会被执行。存在的话,就会被执行。 /linuxrc就是一般所说的就是一般所说的linux 的启动脚本的启动脚本#!/bin/shexport PATH=/bin:/sbin:/usr/binecho Setting up RAMFS, please wait. mount tmpfs /mnt/ramfs -t tmpfstar zxvf /.ramfs.tar.gz -C /mnt/ramfs /dev/null

9、 2&1mount -n /proc /proc -t procecho -en show the pictures /usr/local/bin/fbctl 2&/setup background lightecho doneecho Executing /sbin/init.exec /sbin/init嵌入式嵌入式Linux有关知识培训(基础部分)有关知识培训(基础部分)Kernel 启动过程启动过程 exec /sbin/initInit根据根据/etc/inittab中的内容启动相应的程序中的内容启动相应的程序这里有一个重要参数:这里有一个重要参数:RunLevel例:例:id:2:

10、initdefault:则则RunLevel为为2执行的内容为:执行的内容为:/etc/rc2.d下面的内容下面的内容实际上实际上rc*.d下的内容都是符号链接,都指向下的内容都是符号链接,都指向/etc/init.d下下面的内容面的内容Rc*.d下的程序是按字母顺序执行的下的程序是按字母顺序执行的嵌入式嵌入式Linux有关知识培训(基础部分)有关知识培训(基础部分)开发环境的建立开发环境的建立服务器的安装服务器的安装客户端需安装的程序客户端需安装的程序嵌入式嵌入式Linux有关知识培训(基础部分)有关知识培训(基础部分)开发环境的建立开发环境的建立嵌入式嵌入式Linux有关知识培训(基础部分

11、)有关知识培训(基础部分)交叉编译器交叉编译器为什么要安装交叉编译器为什么要安装交叉编译器ARM-LINUX交叉编译器的下载与安装交叉编译器的下载与安装下载地址:下载地址:ftp:/ftp.arm.linux.org.uk/pub/armlinux/toolchain/2.6.6内核编译器内核编译器http:/www.scratchbox.org/index.html?id=4嵌入式嵌入式Linux有关知识培训(基础部分)有关知识培训(基础部分)内核的下载内核的下载1、内核的版本号、内核的版本号2、内核的下载地址、内核的下载地址http:/www.kernel.org/pub/linux/ke

12、rnel/3、ARM Patch 的下载地址的下载地址ftp:/ftp.arm.linux.org.uk/pub/armlinux/kernel/4、OMAP Patch的下载地址的下载地址http:/ Kerenl的下载方法的下载方法BitKeeper工具工具以下文档中有详细介绍以下文档中有详细介绍http:/ ctName=swpa011 tml?abstra ctName=swpa011 嵌入式嵌入式Linux有关知识培训(基础部分)有关知识培训(基础部分)内核的解压及内核的解压及Patch的使用方法的使用方法以以Innovator Development Kit for OMAP Pl

13、atformInnovator Development Kit for OMAP Platform为例:为例:1 1、解压内核包:、解压内核包:tar xzvf linux-2.4.19.tar.gz2 2、使用、使用PatchPatchpatch p1 /root/patch-2.4.19-rmk7patch p1 /root/patch-2.4.19-rmk7-omap1注:使用注:使用PatchPatch以后将修改内核源代码中的部分内容以后将修改内核源代码中的部分内容嵌入式嵌入式Linux有关知识培训(基础部分)有关知识培训(基础部分)内核的编译内核的编译不同内核版本的编译方法有一些不同

14、不同内核版本的编译方法有一些不同 1 1、以、以2.4.18 2.4.18 的内核的编译为例:的内核的编译为例:make menuconfigmake menuconfigmake depmake depmake cleanmake cleanmake zImagemake zImagemake modulesmake modules make modules_installmake modules_install 2 2、P2 sample (OMAP 730) P2 sample (OMAP 730) 内核的编译方法内核的编译方法cp $(LinuxPath)/arch/arm/confi

15、gs/omap_perseus2_730_defconfig cp $(LinuxPath)/arch/arm/configs/omap_perseus2_730_defconfig $(LinuxPath)/.config$(LinuxPath)/.configmake old_configmake old_configmake zImagemake zImagemake modulesmake modulesmake modules_install make modules_install INSTALL_MOD_PATH=嵌入式嵌入式Linux有关知识培训(基础部分)有关知识培训(基础部

16、分)内核的编译内核的编译内核生成后,位于以下的路径中:内核生成后,位于以下的路径中:$(linux_path)/arch/boot/zImage$(linux_path)/arch/boot/zImage可将生成的内核可将生成的内核imageimage文件直接下载到嵌入式开发板中文件直接下载到嵌入式开发板中 嵌入式嵌入式Linux有关知识培训(基础部分)有关知识培训(基础部分)Linux 根文件系统根文件系统(Rootfs)LinuxLinux支持的文件系统包括:支持的文件系统包括:ext2ext2、ext3ext3、vfatvfat、iso9660iso9660、procproc. .嵌入式

17、嵌入式LinuxLinux中常用的文件系统包括:中常用的文件系统包括:Cramfs RamDiskCramfs RamDiskJffs2Jffs2The Journalling Flash File System, The Journalling Flash File System, version 2version 2http:/ 嵌入式嵌入式Linux有关知识培训(基础部分)有关知识培训(基础部分)虚拟文件系统虚拟文件系统VFS系统启动过程中可以看到:系统启动过程中可以看到:VFS: Mounted root (jffs2 filesystem)VFS: Mounted root (jff

18、s2 filesystem)将将jffs2jffs2文件系统文件系统mount mount 到到VFSVFS 嵌入式嵌入式Linux有关知识培训(基础部分)有关知识培训(基础部分)虚拟文件系统虚拟文件系统VFS在在/etc/fstab文件中,列出了系统启动时自动文件中,列出了系统启动时自动mount的文件系统。的文件系统。例如:例如:# /dev/mtdblock3 / jffs2 defaults 1 1ramdisk mnt/ramdisk tmpfs size=10m 0 0proc /proc proc defaults 0 0注:其中将注:其中将jffs2文件系统文件系统mount到

19、到VFS的的“/”上,而对应的设备是:上,而对应的设备是:/dev/mtdblock3嵌入式嵌入式Linux有关知识培训(基础部分)有关知识培训(基础部分)设备驱动程序设备驱动程序设备驱动程序是操作系统内核和机器硬件之间的接口设备驱动程序是操作系统内核和机器硬件之间的接口. .设备驱动设备驱动程序为应用程序屏蔽了硬件的细节程序为应用程序屏蔽了硬件的细节, ,这样在应用程序看来这样在应用程序看来, ,硬件硬件设备只是一个设备文件设备只是一个设备文件, , 应用程序可以象操作普通文件应用程序可以象操作普通文件一样对硬件设备进行操作一样对硬件设备进行操作设备驱动程序是内核的一部分设备驱动程序是内核的

20、一部分设备驱动程序是在核心态执行的设备驱动程序是在核心态执行的驱动程序或者在编译内容时直接编译到内核中,或者在生成内驱动程序或者在编译内容时直接编译到内核中,或者在生成内核以后将驱动程序编译成模块,然后通过核以后将驱动程序编译成模块,然后通过insmod加入到内核中加入到内核中嵌入式嵌入式Linux有关知识培训(基础部分)有关知识培训(基础部分)设备驱动程序一般结构设备驱动程序一般结构struct file_operations int (*seek) (struct inode * ,struct file *, off_t ,int);int (*read) (struct inode *

21、 ,struct file *, char ,int);int (*write) (struct inode * ,struct file *, off_t ,int);int (*readdir) (struct inode * ,struct file *, struct dirent * ,int);int (*select) (struct inode * ,struct file *, int ,select_table *);int (*ioctl) (struct inode * ,struct file *, unsined int ,unsigned longint (*mm

22、ap) (struct inode * ,struct file *, struct vm_area_struct *);int (*open) (struct inode * ,struct file *);int (*release) (struct inode * ,struct file *);int (*fsync) (struct inode * ,struct file *);int (*fasync) (struct inode * ,struct file *,int);int (*check_media_change) (struct inode * ,struct fil

23、e *);int (*revalidate) (dev_t dev);驱动程序的主要任务就是填充这个结构驱动程序的主要任务就是填充这个结构嵌入式嵌入式Linux有关知识培训(基础部分)有关知识培训(基础部分)设备驱动程序中两个重要函数设备驱动程序中两个重要函数int init_module(void)int init_module(void)就是向系统的字符设备表登记了一个设备就是向系统的字符设备表登记了一个设备当使用当使用insmodinsmod加入模块时,该函数被调用加入模块时,该函数被调用void cleanup_module(void)void cleanup_module(void)

24、它释放字符设备在系统设备表中占有的表项它释放字符设备在系统设备表中占有的表项在用在用rmmodrmmod卸载模块时,卸载模块时,cleanup_modulecleanup_module函数被调用函数被调用嵌入式嵌入式Linux有关知识培训(基础部分)有关知识培训(基础部分)设备驱动程序设备驱动程序编译设备驱动程序编译设备驱动程序gcc -DMODULE -D_KERNEL_ -c test.cgcc -DMODULE -D_KERNEL_ -c test.c得到的得到的test.o就是设备驱动程序就是设备驱动程序设备文件与设备号设备文件与设备号设备被加入到系统中后,系统会为其分配设备号设备被加

25、入到系统中后,系统会为其分配设备号在在/proc/devices/proc/devices可以看到设备的设备号可以看到设备的设备号通过通过mknod命令建立设备节点。命令建立设备节点。通过打开设备节点就可以操作对应的设备了通过打开设备节点就可以操作对应的设备了第二部分第二部分C语言开发语言开发嵌入式嵌入式Linux知识培训(知识培训(C语言的开发)语言的开发)编辑工具编辑工具 vi kate编译、链接工具编译、链接工具 gccLinux下的编译器(下的编译器(C语言)是语言)是cc,汇编器是,汇编器是as,链接器是链接器是ld调试工具调试工具 gdb举例举例Linux 下下C语言开发基本知识语

26、言开发基本知识嵌入式嵌入式Linux知识培训(知识培训(C语言的开发)语言的开发)Makefile的使用(举例)的使用(举例)动态链接库的生成及使用方法(举例)动态链接库的生成及使用方法(举例)多线程编程多线程编程线程的同步技术线程的同步技术Linux下的高级开发技术下的高级开发技术嵌入式嵌入式Linux知识培训(知识培训(C语言的开发)语言的开发)线程的同步技术线程的同步技术互斥量(互斥量(mutex)条件变量条件变量守候条件变量守候条件变量向条件变量发出信号向条件变量发出信号信号量(信号量(P,V操作)操作)Linux下的高级开发技术下的高级开发技术嵌入式嵌入式Linux知识培训(知识培训

27、(C语言的开发)语言的开发)IPC(进程间通信)(进程间通信)消息队列消息队列共享内存共享内存管道管道.GUI中通常使用的是中通常使用的是domain_socketLinux下的高级开发技术下的高级开发技术嵌入式嵌入式Linux知识培训(知识培训(C语言的开发)语言的开发)关键设备的访问方法关键设备的访问方法framebufferFramebuffer简介简介 Linux下的下的framebuffer是一个抽象的图形设备,是一个抽象的图形设备,它可以使应用程序直接访问图形硬件设备。它可以使应用程序直接访问图形硬件设备。 设备节点是设备节点是/dev/fb* 面向嵌入式面向嵌入式Linux的的G

28、UI系统基本上都是基于系统基本上都是基于FramebufferLinux下的高级开发技术下的高级开发技术嵌入式嵌入式Linux知识培训(知识培训(C语言的开发)语言的开发)BOOL InitFrameBuffer() _lGUI_iFrameBuffer = open (/dev/fb0, O_RDWR); ioctl (_lGUI_iFrameBuffer, FBIOGET_VSCREENINFO,&_lGUI_vInfo); _lGUI_iFrameHeight=_lGUI_vInfo.yres; _lGUI_iFrameWidth=_lGUI_vInfo.xres; _lGUI_iLin

29、eSize = _lGUI_vInfo.xres * _lGUI_vInfo.bits_per_pixel / 8; _lGUI_iBufferSize = _lGUI_iLineSize * _lGUI_vInfo.yres; ioctl (_lGUI_iFrameBuffer, FBIOPAN_DISPLAY, &_lGUI_vInfo); _lGUI_pFrameBuffer =mmap (NULL, _lGUI_iBufferSize, PROT_READ | PROT_WRITE, MAP_SHARED, _lGUI_iFrameBuffer, 0); if(!_lGUI_pFrameBuffer) printerror(mmap return error.); return FALSE; return TRUE;嵌入式嵌入式Linux知识培训(知识培训(C语言的开发)语言的开发)关键设备的访问方法关键设备的访问方法串口操作串口操作示例示例Linux下的高级开发技术下的高级开发技术

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

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!