嵌入式Linux知识培训

上传人:jiups****uk12 文档编号:45250233 上传时间:2018-06-15 格式:PPT 页数:34 大小:140.50KB
返回 下载 相关 举报
嵌入式Linux知识培训_第1页
第1页 / 共34页
嵌入式Linux知识培训_第2页
第2页 / 共34页
嵌入式Linux知识培训_第3页
第3页 / 共34页
嵌入式Linux知识培训_第4页
第4页 / 共34页
嵌入式Linux知识培训_第5页
第5页 / 共34页
点击查看更多>>
资源描述

《嵌入式Linux知识培训》由会员分享,可在线阅读,更多相关《嵌入式Linux知识培训(34页珍藏版)》请在金锄头文库上搜索。

1、嵌入式Linux知识培训主要包括以下四部分内容:一、嵌入式Linux开发的基本知识二、Linux下使用C语言进行系统开发三、面向嵌入式Linux的GUI系统的体系结构及二次开发四、基于Linux OS Smart Phone的体系结构及开发内容李玉东第一部分基础知识嵌入式Linux有关知识培训(基础部分 )嵌入式Linux软件系统的构成1.BootLoader2. Kernel3.FileSystem4.GUI5.Application嵌入式Linux有关知识培训(基础部分 )嵌入式Linux系统的构成(BootLoader)1.PC机的系统引导过程 系统加电跳转到固定地址BIOSMBRKer

2、nel 2.嵌入式系统中的bootloader与PC机的引导程序是类似的 系统加电跳转到固定的地址读入bootloader程序 初始化系统加载kernel,将系统的控制权转到kernel. 3.bootloader与机器硬件紧密相关。 4.有一定通用性的bootloader程序uboot http:/ 5.uboot需要根据机器的情况进行修改嵌入式Linux有关知识培训(基础部分 )典型的空间分配结构Creating 4 MTD partitions on “PXA Cerf Flash“: 0x00000000-0x00040000 : “Bootloader“ 0x00040000-0x0

3、00c0000 : “Partition Tables“ 0x000c0000-0x001c0000 : “Kernel“ 0x001c0000-0x02000000 : “Filesystem“嵌入式Linux有关知识培训(基础部分 )Multi Stage BootLoader 由于 Boot Loader 的实现依赖于 CPU 的体系结构 ,因此大多数 Boot Loader 都分为 stage1 和stage2 两大部分。依赖于 CPU 体系结构的代码,比如设备初始化代码等 ,通常都放在 stage1 中,而且通常都用汇编语言来实现 ,以达到短小精悍的目的。 而 stage2 则通常用

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

5、段要使用到的硬件设备。 检测系统内存映射(memory map)。 将 kernel 映像和根文件系统映像从 flash 上读到 RAM 空间 中。 为内核设置启动参数。 调用内核。 嵌入式Linux有关知识培训(基础部分 )BootLoader 调用内核Boot Loader 调用 Linux 内核的方法是直接跳转到内 核的第一条指令处开始执行如果系统显示 Uncompressing Linux. done, booting the kernel.说明Bootloader已成功加载了kernel,Kernel开始启动嵌入式Linux有关知识培训(基础部分 )嵌入式Linux有关知识培训(基础

6、部分 )Kernel 启动过程检查root device mount root file system.如果root file system中,/linuxrc存在的话,就会被执行。/linuxrc就是一般所说的linux 的启动脚本 #!/bin/sh export PATH=/bin:/sbin:/usr/bin echo “Setting up RAMFS, please wait. “ mount tmpfs /mnt/ramfs -t tmpfs tar zxvf /.ramfs.tar.gz -C /mnt/ramfs /dev/null 2int (*read) (struct

7、inode * ,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 longi

8、nt (*mmap) (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 * ,str

9、uct file *);int (*revalidate) (dev_t dev);驱动程序的主要任务就是填充这个结构嵌入式Linux有关知识培训(基础部分 )设备驱动程序中两个重要函数int init_module(void)就是向系统的字符设备表登记了一个设备当使用insmod加入模块时,该函数被调用void cleanup_module(void)它释放字符设备在系统设备表中占有的表项在用rmmod卸载模块时,cleanup_module函数被调用嵌入式Linux有关知识培训(基础部分 )设备驱动程序编译设备驱动程序 gcc -DMODULE -D_KERNEL_ -c test.c 得

10、到的test.o就是设备驱动程序设备文件与设备号 设备被加入到系统中后,系统会为其分配设备号 在/proc/devices可以看到设备的设备号 通过mknod命令建立设备节点。 通过打开设备节点就可以操作对应的设备了第二部分C语言开发嵌入式Linux知识培训(C语言的开发)编辑工具 vi kate编译、链接工具 gccLinux下的编译编译 器(C语语言)是cc,汇编汇编 器是as, 链链接器是ld调试工具 gdb举例Linux 下C语言开发基本知识嵌入式Linux知识培训(C语言的开发)Makefile的使用(举例)动态链接库的生成及使用方法(举例)多线程编程线程的同步技术Linux下的高级

11、开发技术嵌入式Linux知识培训(C语言的开发)线程的同步技术互斥量(mutex) 条件变量 守候条件变量 向条件变量发出信号 信号量(P,V操作)Linux下的高级开发技术嵌入式Linux知识培训(C语言的开发)IPC(进程间通信)消息队列 共享内存 管道 .GUI中通常使用的是domain_socketLinux下的高级开发技术嵌入式Linux知识培训(C语言的开发)关键设备的访问方法framebufferFramebuffer简介Linux下的framebuffer是一个抽象的图形设备, 它可以使应用程序直接访问图形硬件设备。设备节点是/dev/fb* 面向嵌入式Linux的GUI系统基

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

13、el / 8;_lGUI_iBufferSize = _lGUI_iLineSize * _lGUI_vInfo.yres;ioctl (_lGUI_iFrameBuffer, FBIOPAN_DISPLAY, _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下的高级开发技术

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号