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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

第二学期嵌入式复习提纲.docx

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

2、统的AD处理器功能可以提供多达 个引脚输入,AD转换精度可达 位。 S3C2410的中断控制寄存器类型以及工作模式第二节、基本命令及操作 (配套实验,实验一)主要掌握命令的使用Cp, mv, tar, cd, ls, mkdir, man, pwd,rm, mount ,chmod, find, gzip, ifconfig,ping第三节、vi以及gcc (配套实验,实验一) Vi编辑器,包括vi编辑器的几种模式,vi编辑器中几种模式之间的转换,保存,退出等命令的使用 Gcc编译器:包括四种编译阶段,各个阶段所针对的文件后缀等 在给定参数情况下,能够使用GCC命令编译简单的源代码第四节、gd

3、b及make (配套实验,实验一) Gdb,包括gdb各种命令的使用 Make工具的定义 Makefile包含的内容:Linux中Makefile包括以下内容:(1) 需要由 make 工具创建的项目,通常是目标文件和可执行文件。通常使用“目标(target)”一词来表示要创建的项目。(2) 要创建的项目依赖于哪些文件。(3) 创建每个项目时需要运行的命令。 Makefile的编写规则 Make的编译规则(一) 附录:Make file编写实例1) edit : main.o kbd.o command.o /定义目标文件edit和源文件main.o等 gcc -o edit main.o k

4、bd.o command.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 c

5、ommand.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:

6、 clean /定义伪目标clean: /定义clean -rm -f *.o /删除中间文件 第五节、交叉编译环境的搭建 【配套实验,实验二】 什么是交叉编译环境,为什么要搭建交叉编译环境 搭建交叉编译环境的方法 【配套实验,实验二】 搭建交叉编译工具(EABI 4.3.3) 通讯(PC-ARM) 串口(minicom超级终端)【要求掌握minicom及超级终端的设置方法步骤】 网络(NFSTFTP)【要求掌握NFS及TFTP的设置方法步骤】 JTAG第六节、引导程序bootloader、内核、文件系统【配套实验,实验三、四】 引导程序bootloader 什么是bootloader以及bo

7、otloader的作用 Bootloader启动的两个阶段 安装U-boot的过程 内核 内核的基本定义 内核静态编译的大致内容及过程 文件系统 什么是文件系统 根目录结构 利用mount命令挂载文件系统的方法 利用busybox创建文件系统的方法 【实验三】第七节、驱动程序 【实验四】 设备管理的总体结构 设备驱动的定义 设备驱动的存在形式 设备驱动的分类及其代表 设备驱动的开发流程 字符设备驱动代码的结构 字符设备驱动程序的编写实例1、1) static struct file_operations keybd_fops = open: keybd_open, read: keybd_re

8、ad, 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, / size_t size) int keybd_release(struct inode *inode, struct file *filp) / printk(release okn); / return 0;ssize_t led_write(struct file *

9、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(keybd_exit); /实例2、2) LED灯的驱动程序:/* driver/char/led.c * this is a led char device driver. * Any problem pls contact support*/#include #

10、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)#define 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

11、 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 LED_GPADATA;unsigned long led_write_addr;int led_open(struct inode *, struct file *);int led_release(struct inode *, struct file *);int

12、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_t );static struct file_operations led_fops = open: led_open, read: led_read, write: led_write, ioctl: led_ioctl, release: led_release

13、,;/* * 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_select 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, c

14、har * 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 *inode, struct file *filp)/ led_sle &= (0x2000); /chip_select disable/ led_sle_data |= 0x2000; printk(release okn); return 0;int led_ioct

15、l(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_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 IO

16、CTRL_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; return err;int _init led_init(void) printk(*led_init*n); LED_GPACON = ioremap(0x56000000,4); LED_GPADATA = ioremap(0x56000004,4); LED

17、_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); return 0;static void _exit led_exit(void) devfs_unregister(devfs_led);module_init(led_init);module_exit(led_exit); 测试程序的编写实例1、LED灯测试程序【实

18、验四中附录】实例2、ADC测试程序#include#include#includeintmain(intargc,char*argv)intfd;/以阻塞方式打开设备文件,非阻塞时flags=O_NONBLOCKfd=open(/dev/my2440_adc,0);if(fd0)printf(Open ADC Device Faild!n);exit(1);while(1)intret;intdata/读设备ret=read(fd,&data,sizeof(data);if(ret!=sizeof(data)if(errno!=EAGAIN)printf(Read ADC Device Fai

19、ld!n);continue;elseprintf(Read ADC value is: %dn,data);close(fd);return0;第八节、中断 中断的定义及种类 CPU响应中断的方式 中断相关数据结构的定义 中断程序的编写实例1、#include #include #include #include #include #include #include #include #include #include #include void testirq_interrupt(int,void *,struct pt_regs *);static int testirq_init(vo

20、id);/*/Interrupt Functionvoid testirq_interrupt(int irq,void *d,struct pt_regs *regs) /*clear interrupt register for EINT5*/ SRCPND &= (0x00000010); /bit4 INTPND = INTPND; EINTPEND &= (0x00000020); /bit5 printk(Entered an interrupt! Beginning interrupt service!n); /*/Initialize Functionstatic int _i

21、nit testirq_init(void) static int result; unsigned long gpfup;/ long pullup; set_external_irq(IRQ_EINT5, EXT_FALLING_EDGE, GPIO_PULLUP_DIS); gpfup = ioremap(0x56000058,4); /pull_up for port f (*(volatile unsigned long *)gpfup) = 0; disable_irq(IRQ_EINT5); enable_irq(IRQ_EINT5); result=request_irq(IR

22、Q_EINT5,&testirq_interrupt,SA_INTERRUPT,testirq,NULL); if (result) printk(Cant get assigned irq %d,result=%dn,IRQ_EINT5,result); return result; printk(Testirq interrupt registered ok!n); return 0;static void _exit testirq_exit(void) disable_irq(IRQ_EINT5); free_irq(IRQ_EINT5, NULL); printk(exit okn)

23、;module_init(testirq_init);module_exit(testirq_exit);第九节、模块加卸载 【实验四、五】 模块加卸载的方式(静态编译、动态加载) 模块静态编译的方法(已有GPIO.C如何添加进内核)【实验四】 模块动态加载的定义 模块动态加载的优缺点 模块动态加载的方法 【实验五】第十节、minigui的安装 【实验六】第十一节、综合实例 (ADC)(三) S3C2440中AD转换器驱动程序1、建立驱动程序文件my2440_adc.c,实现驱动的初始化和退出#include#include#include#include#include#include#in

24、clude#include#include#include#include/*定义了一个用来保存经过虚拟映射后的内存地址*/staticvoid_iomem*adc_base;/*保存从平台时钟队列中获取ADC的时钟*/staticstructclk*adc_clk;/*申明并初始化一个信号量ADC_LOCK,对ADC资源进行互斥访问*/DECLARE_MUTEX(ADC_LOCK);staticint_init adc_init(void)intret;/*从平台时钟队列中获取ADC的时钟,这里为什么要取得这个时钟,因为ADC的转换频率跟时钟有关。系统的一些时钟定义在arch/arm/pla

25、t-s3c24xx/s3c2410-clock.c中*/adc_clk=clk_get(NULL,adc);if(!adc_clk)/*错误处理*/printk(KERN_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空间的操作,

26、 S3C2410_PA_ADC是ADC控制器的基地址,定义在mach-s3c2410/include/mach/map.h中,0x20是虚拟地址长度大小*/adc_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_MIN

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

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