ImageVerifierCode 换一换
格式:DOCX , 页数:24 ,大小:66.14KB ,
资源ID:4967259      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/4967259.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(嵌入式系统复习提纲1.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

嵌入式系统复习提纲1.docx

1、嵌入式系统复习提纲1嵌入式系统复习提纲嵌入式系统的基本概念嵌入式交叉编译平台及工具嵌入式应用软件及程序设计一、 嵌入式基本概念: 嵌入式系统定义:嵌入式系统是以应用为中心,以计算机技术为基础,且软硬件可裁剪,适应应用系统对功能、可靠性、成本、体积、功耗有严格要求的专用计算机系统。它一般由以下几部分组成: 嵌入式微处理器,外围硬件设备,嵌入式操作系统,特定的应用程序 特点:应用的特定性和广泛性,技术、知识、资金的密集性,高效性,较长的生命周期,高可靠性,软硬一体,软件为主,无自举开发能力。三要素:嵌入、专用、计算机。 ARM微处理器的类型 嵌入式应用系统的硬件结构 ARM9的流水线结构 S3C2

2、440的引脚分类 S3C2410应用系统的AD处理器功能可以提供多达 个引脚输入,AD转换精度可达 位。 S3C2410的中断控制寄存器类型以及工作模式二、 主要命令使用Cp, mv, tar, cd, ls, mkdir, man, pwd,rm, mount ,chmod, find, gzip, ifconfig,ping三、 Linux的目录结构 /bin:存放系统所需要的那些命令,比如ls、cp、mkdir等命令;功能和/usr/bin类似,这个目录中的文件都是可执行的、普通用户可以使用的命令。 /boot:这是Linux的内核及引导系统程序所需要的文件目录,比如initrd.img

3、等文件都位于这个目录中,grub系统引导管理器也位于这个目录。 /dev:设备文件存储目录,比如声卡、磁盘。 /etc:系统配置文件的所在,一些服务器的配置文件也在这里;比如用户帐号及密码配置文件。 /home:普通用户目录默认存放目录。 /lib:库文件存放目录 /lost+found:当系统意外崩溃或机器意外关机,而产生一些文件碎片放在这里。当系统启动的过程中fsck公交会检查这里,并修复已经损坏的文件系统。 /mnt:这个目录是用于存放挂载储存设备的挂载目录的。比如有cdrom等目录。/etc/fatab /opt:表示的是可选择的意思,有些软件包也会被安装在这里,也就是自定义软件包。

4、/proc:操作系统运行时,进程信息及内核信息存放在这里。proc并不是真正的文件系统,它的定义可以参见/etc/fstab /root:linux超级权限用户root的目录。 /sbin:大多是涉及系统管理的命令的存放,是超级权限用户root的可指向命令存放地,普通用户无权限执行这个目录下的命令,这个目录和/usr/sbin;/usr/local/sbin目录是相似的。凡是目录sbin中包含的都是root权限才能执行的。 /tmp:临时文件目录,有时用户运行程序的时候,会产生临时文件。这个目录和/var/tmp目录相似。 /usr:这个是系统存放程序的目录,比如命令、帮助文件等。当我们安装一

5、个linux发行版官方提供的软件包时,大多安装在这里。如果有涉及服务器配置文件的,会把配置文件安装在/etc目录中。/usr目录下包括设计字体目录/usr/share/fonts,帮助目录/usr/share/man 或/usr/share/doc,普通用户可执行文件目录/usr/bin或/usr/local/bin;超级权限用户root可执行命令存放目录,比如/usr/sbin或/usr/local/sbin等,还有程序的头文件存放目录/usr/include /var:这个目录的内容是经常变动的,/var下有/var/log这是用来存放系统日志的目录。/var/lib用来存放一些库文件,比

6、如MySQL的。 /media:本目录是空的,是用于挂载的。 /srv:一些服务需要访问的文件存放在这 /sys:系统的核心文件 /cdrom:光驱一些重要的子目录/etc/init.d:这个目录是用来存放系统或服务器以System V模式启动的脚本。 /etc/X11:这是X-Window相关的配置文件存放地。 /usr/bin:这个目录是可执行程序的目录,普通用户就有权限执行;当我们从系统自带的软件包安装一个程序时,他的可执行文件大多会放在这个目录。 /usr/sbin :这个目录也是可执行程序的目录,但大多存放设计系统管理的命令,只有root权限才能执行。 /usr/local:这个目录

7、一般是用来存放用户自编译安装软件的存放目录;一般是通过源码包安装的软件,如果没有特别指定安装目录的话,一般是安装在这个目录中。 /usr/share:系统共用的东西存放地。 /usr/src:内核源码存放的目录。 五、 Linux操作系统设备驱动的分类分为:字符类设备、块设备、网络设备;1)字符设备char:按键,LED等,通常是顺序读写可以像文件一样被访问不需缓存BUFFER,数据由应用程序直接传递给对应的驱动程序管理方式是为操作提供方便。2)块设备block:FLASH,DOC等,可以像文件一样被访问,应用程序对其操作要经过系统的缓冲区,即间接传递给驱动程序处理,管理方式是为系统的存储提供

8、优化。3)网络设备Linux中Makefile包括以下内容:(1) 需要由 make 工具创建的项目,通常是目标文件和可执行文件。通常使用“目标(target)”一词来表示要创建的项目。(2) 要创建的项目依赖于哪些文件。(3) 创建每个项目时需要运行的命令。 设备驱动程序的基本结构: (1)驱动程序的注册与注销。 (2)设备的打开与释放。 (3)设备的读写操作。(4)设备的控制操作。 (5)设备的中断和轮询处理 字符设备的基本结构图:四、 实验操作部分 Vi编辑器,包括vi编辑器的几种模式,保存,退出等命令的使用 Gcc编译器:包括四种编译阶段,各个阶段所针对的文件后缀等 Gdb,包括gdb

9、各种命令的使用 windows环境下超级终端的配置以及LINUX操作系统中minicom的配置步骤。 简述Linux环境下NFS的配置步骤 Linux环境下TFTP的配置步骤 简述busybox安装编译过程 制作yaffs2文件系统的步骤 LINUX文件系统中makefile一般应包含那些内容 Bootloader的在嵌入式系统中基本作用? 安装U-boot的过程 安装编译交叉编译器的步骤五、 程序(一) Make file编写程序1) edit : main.o kbd.o command.o /定义目标文件edit和源文件main.o等 gcc -o edit main.o kbd.o c

10、ommand.o /定义edit的编译方法 main.o : main.c defs.h /定义目标文件main.o和源文件main.c defs.h gcc -c main.c /定义main.o的编译方法 kbd.o : kbd.c defs.h command.h /定义目标文件kbd.o和源文件 gcc -c kbd.c /定义kbd.o的编译方法 command.o : command.c defs.h command.h /定义目标文件command.o和源文件 gcc -c command.c clean : /定义伪目标 rm edit main.o kbd.o command

11、.o display.o insert.o /删除目标文件2) CC = /opt/host/armv4l/bin/armv4l-unknown-linux-gcc /定义gccLD = /opt/host/armv4l/bin/armv4l-unknown-linux-ld /定义ldCFLAGS = -I/HHARM9-EDU/kernel/include/linux -Wall /定义编译选项led.o: led.c /定义目标和源文件 $(CC) $(CFLAGS) -g led.c -o led /编译方法 cp led.o / -f /复制led.o到 /.PHONY: clean

12、 /定义伪目标clean: /定义clean -rm -f *.o /删除中间文件 (二) 字符类设备的驱动程序1) static struct file_operations keybd_fops = open: keybd_open, read: keybd_read, release: keybd_release,; /int keybd_open(struct inode *inode, struct file *filp) / printk(open okn); return 0;ssize_t keybd_read(struct file *fp, char * buf, / si

13、ze_t size) int keybd_release(struct inode *inode, struct file *filp) / printk(release okn); / return 0;ssize_t led_write(struct file *fp, char * buf, / size_t size) int _init keybd_init(void) / static void _exit keybd_exit(void) / devfs_unregister(devfs_keybd); /module_init(keybd_init); /module_exit

14、(keybd_exit); /附录:示例1 LED灯的驱动程序:/* driver/char/led.c * this is a led char device driver. * Any problem pls contact support*/#include #include #include #include #include #include #include #include #include #include #include #include #include led_ioctl.h#define LED_MAJOR 139#define LED_2 (LED_1 + 1)#d

15、efine LED_3 (LED_1 + 2)#define LED_4 (LED_1 + 3)#define LED_5 (LED_1 + 4)#define LED_6 (LED_1 + 5)#define led_sle (*(volatile unsigned long *)LED_GPACON)#define led_sle_data (*(volatile unsigned long *)LED_GPADATA)devfs_handle_t devfs_led;unsigned long LED_1;unsigned long LED_GPACON;unsigned long LE

16、D_GPADATA;unsigned long led_write_addr;int led_open(struct inode *, struct file *);int led_release(struct inode *, struct file *);int led_ioctl(struct inode *, struct file *, unsigned int, unsigned long);ssize_t led_read(struct file *, char * , size_t );ssize_t led_write(struct file *, char * , size

17、_t );static struct file_operations led_fops = open: led_open, read: led_read, write: led_write, ioctl: led_ioctl, release: led_release,;/* * Open/close code for raw IO.*/int led_open(struct inode *inode, struct file *filp) led_sle |= 0x2000; /chip_select enable led_sle_data &= (0x2000);/0 - chip_sel

18、ect printk(open okn); return 0;ssize_t led_read(struct file *fp, char * buf,size_t size) return 1;ssize_t led_write(struct file *fp, char * buf, size_t size) char key; if (get_user(key, buf) return -EFAULT; (*(volatile unsigned char *) led_write_addr) = key; return 1;int led_release(struct inode *in

19、ode, struct file *filp)/ led_sle &= (0x2000); /chip_select disable/ led_sle_data |= 0x2000; printk(release okn); return 0;int led_ioctl(struct inode *inode, struct file *flip, unsigned int command,unsigned long arg) int err = 0; switch (command) /judge which led want to light case IOCTRL_LED_1: led_

20、write_addr = LED_1; break; case IOCTRL_LED_2: led_write_addr = LED_2; break; case IOCTRL_LED_3: led_write_addr = LED_3; break; case IOCTRL_LED_4: led_write_addr = LED_4; break; case IOCTRL_LED_5: led_write_addr = LED_5; break; case IOCTRL_LED_6: led_write_addr = LED_6; break; default: err = -EINVAL;

21、 return err;int _init led_init(void) printk(*led_init*n); LED_GPACON = ioremap(0x56000000,4); LED_GPADATA = ioremap(0x56000004,4); LED_1 = ioremap(0x10000000,8); devfs_led = devfs_register(NULL, led, DEVFS_FL_DEFAULT,LED_MAJOR, 0, S_IFCHR | S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP, &led_fops, NULL); re

22、turn 0;static void _exit led_exit(void) devfs_unregister(devfs_led);module_init(led_init);module_exit(led_exit);示例2 S3C2440中AD转换器驱动程序1、建立驱动程序文件my2440_adc.c,实现驱动的初始化和退出#include#include#include#include#include#include#include#include#include#include#include/*定义了一个用来保存经过虚拟映射后的内存地址*/staticvoid_iomem*adc

23、_base;/*保存从平台时钟队列中获取ADC的时钟*/staticstructclk*adc_clk;/*申明并初始化一个信号量ADC_LOCK,对ADC资源进行互斥访问*/DECLARE_MUTEX(ADC_LOCK);staticint_init adc_init(void)intret;/*从平台时钟队列中获取ADC的时钟,这里为什么要取得这个时钟,因为ADC的转换频率跟时钟有关。系统的一些时钟定义在arch/arm/plat-s3c24xx/s3c2410-clock.c中*/adc_clk=clk_get(NULL,adc);if(!adc_clk)/*错误处理*/printk(K

24、ERN_ERRfailed to find adc clock sourcen);return-ENOENT;/*时钟获取后要使能后才可以使用,clk_enable定义在arch/arm/plat-s3c/clock.c中*/clk_enable(adc_clk);/*将ADC的IO端口占用的这段IO空间映射到内存的虚拟地址,ioremap定义在io.h中。 注意:IO空间要映射后才能使用,以后对虚拟地址的操作就是对IO空间的操作, S3C2410_PA_ADC是ADC控制器的基地址,定义在mach-s3c2410/include/mach/map.h中,0x20是虚拟地址长度大小*/adc_

25、base=ioremap(S3C2410_PA_ADC,0x20);if(adc_base=NULL)/*错误处理*/printk(KERN_ERRFailed to remap register blockn);ret=-EINVAL;gotoerr_noclk;/*把看ADC注册成为misc设备,misc_register定义在miscdevice.h中 adc_miscdev结构体定义及内部接口函数在第步中讲,MISC_DYNAMIC_MINOR是次设备号,定义在miscdevice.h中*/ret=misc_register(&adc_miscdev);if(ret)/*错误处理*/p

26、rintk(KERN_ERRcannot register miscdev on minor=%d (%d)n,MISC_DYNAMIC_MINOR,ret);gotoerr_nomap;printk(DEVICE_NAME initialized!n);return0;/以下是上面错误处理的跳转点err_noclk:clk_disable(adc_clk);clk_put(adc_clk);err_nomap:iounmap(adc_base);returnret;staticvoid_exit adc_exit(void)free_irq(IRQ_ADC,1);/*释放中断*/iounma

27、p(adc_base);/*释放虚拟地址映射空间*/if(adc_clk)/*屏蔽和销毁时钟*/clk_disable(adc_clk);clk_put(adc_clk);adc_clk=NULL;misc_deregister(&adc_miscdev);/*注销misc设备*/*导出信号量ADC_LOCK在触摸屏驱动中使用,因为触摸屏驱动和ADC驱动公用相关的寄存器,为了不产生资源竞态,就用信号量来保证资源的互斥访问*/EXPORT_SYMBOL(ADC_LOCK);module_init(adc_init);module_exit(adc_exit);MODULE_LICENSE(GPL);MODULE_DESCRIPTION(My2440 ADC Driver);2、adc_miscdev结构体定义及内部各接口函数的实现,代码如下#include/*设备名称*/#defineDEVICE_NAMEmy2440_adc/*定义并初始化一个等待队列adc_waitq,对ADC资源进行阻塞访问*/staticDECLARE_WAIT_QUEUE_HEAD(adc_waitq);/*用于标识AD转换后的数据是否可以读取,0表示不可读取*/staticvo

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1