嵌入式系统原理及应用开发 教学课件 ppt 作者 陈渝 第11章 嵌入式Linux驱动开发

上传人:E**** 文档编号:89494382 上传时间:2019-05-25 格式:PPT 页数:33 大小:824.50KB
返回 下载 相关 举报
嵌入式系统原理及应用开发 教学课件 ppt 作者 陈渝 第11章 嵌入式Linux驱动开发_第1页
第1页 / 共33页
嵌入式系统原理及应用开发 教学课件 ppt 作者 陈渝 第11章 嵌入式Linux驱动开发_第2页
第2页 / 共33页
嵌入式系统原理及应用开发 教学课件 ppt 作者 陈渝 第11章 嵌入式Linux驱动开发_第3页
第3页 / 共33页
嵌入式系统原理及应用开发 教学课件 ppt 作者 陈渝 第11章 嵌入式Linux驱动开发_第4页
第4页 / 共33页
嵌入式系统原理及应用开发 教学课件 ppt 作者 陈渝 第11章 嵌入式Linux驱动开发_第5页
第5页 / 共33页
点击查看更多>>
资源描述

《嵌入式系统原理及应用开发 教学课件 ppt 作者 陈渝 第11章 嵌入式Linux驱动开发》由会员分享,可在线阅读,更多相关《嵌入式系统原理及应用开发 教学课件 ppt 作者 陈渝 第11章 嵌入式Linux驱动开发(33页珍藏版)》请在金锄头文库上搜索。

1、第11章 嵌入式Linux驱动开发,第11章 嵌入式Linux驱动开发,11.1 串口及控制台驱动 11.2 FrameBuffer驱动 11.3 以太网络驱动 11.4 Linux驱动程序总结,11.1 串口及控制台驱动,串口及控制台驱动的作用 Linux串口驱动结构 Linux控制台驱动结构,串口及控制台驱动的作用,在嵌入式Linux中,控制台(console)是系统重要的输出设备。在通过Bootloader引导内核的时候,可以使用console=的命令行来指定控制台。当没有指定控制台的时候,系统利用第一个注册的终端设备(tty)作为系统的控制台。,串口及控制台驱动的作用,嵌入式处理器一般

2、都具有串口控制器(UART)。在嵌入式Linux,串口的地位非常重要,尤其在系统调试阶段,一切有用的信息都可以从串口输入到主机。,串口及控制台驱动的作用,Linux串口驱动结构,串口驱动程序的核心部分 : drivers/char/serial_core.h drivers/char/serial_core.c 串口驱动(struct uart_driver) 串口端口(struct uart_port) 端口操作的数据结构(struct uart_ops) 串口状态(struct uart_state),包含串口的 操作struct uart_ops,Linux串口驱动结构,结构体uart_

3、driver是串口驱动程序的框架; 结构体struct uart_port用于描述一个UART端口,其中包含到struct uart_ops的指针。 结构体struct uart_ops是serial_core.h中定义的另外一个重要的数据结构,它表示对串口的操作; 结构体struct uart_state表示串口的状态。,Linux控制台驱动结构,控制台的主要数据结构,在linux源代码的include/linux/console.h下。 数据结构struct console定义Linux的控制台,console_cmdline定义了命令行中的控制台。 在Linux内核启动的时候,使用con

4、sole=指定的控制台的名字就是使用console_cmdline类型结构体中的名字name8。,Linux控制台驱动结构,控制台命令行数据结构: struct console_cmdline char name8; /* 驱动的名称 */ int index; /* 驱动次设备系引 */ char *options; /* 驱动的可选项 */ ;,Linux控制台驱动结构,控制台数据结构: struct console char name8; void (*write)(struct console *, const char *, unsigned); int (*read)(struct

5、 console *, const char *, unsigned); kdev_t (*device)(struct console *); void (*unblank)(void); int (*setup)(struct console *, char *); short flags; short index; int cflag; struct console *next; ;,控制台的写操作必须实现,为printk的输出所使用,读操作可以不实现。,setup 函数指针实现初始化的功能。,11.2 FrameBuffer驱动,LCD驱动原理 显示内存 FrameBuffer驱动结构

6、,LCD驱动原理,LCD的含义为液晶显示屏,在嵌入式系统中,通常使用处理器内部LCD控制器连接LCD完成显示工作。嵌入式系统中流行LCD主要包括两种类型: STN(Super Twisted Nematic,超扭曲向列型) 被动型 TFT(Thin Film Transistor,薄膜晶体管型) 主动型,STN和TFT的LCD显示屏需要的驱动电平不同。,LCD驱动原理,嵌入式处理器的LCD控制器的共同点: LCD控制器集成在处理器芯片之中 CPU通过读写LCD控制器的寄存器进行配置 使用系统内存作为显示内存,显示内存一般由CPU写,有LCD控制器读。,LCD驱动原理,LCD的操作中,主要涉及到

7、以下部件: LCD控制器(片内) LCD DMA(片内) CPU(片内) 内存控制器(片内) 总线控制器(片内) LCD显示屏(片外) 内存(片外),DMA用于让LCD控制器访问内存。,LCD驱动原理,使用DMA方式读取显示内存,显示内存,FrameBuffer驱动结构,FrameBuffer的核心是一块供显示使用的内存,由系统中显示机构将显示内存中的内容显示到显示设备上。 帧缓冲驱动本质上是一个字符设备(char device)的驱动,但是具有自己的框架。,FrameBuffer驱动结构,FrameBuffer接口常使用mmap和ioctl。,FrameBuffer驱动结构,在linux内核

8、目录中include/linux/fb.h定义了FrameBuffer主要数据结构和接口。 屏幕信息数据结构: struct fb_info int node; int flags; struct fb_var_screeninfo var; struct fb_fix_screeninfo fix; /* */ ;,显示屏变量,显示屏固定量,FrameBuffer驱动结构,变化屏幕信息数据结构: struct fb_var_screeninfo _u32 xres; /* 可见分辨率 */ _u32 yres; _u32 xres_virtual; /* 虚拟分辨率 */ _u32 yres

9、_virtual; _u32 xoffset; /* 虚拟到可见的偏移量 */ _u32 yoffset; _u32 bits_per_pixel; _u32 grayscale; /* 如果不为0灰度级代替彩色 */ struct fb_bitfield red; /* 如果为真色彩代表帧缓冲的位域 */ struct fb_bitfield green; /* 否则只有长度有意义 */ struct fb_bitfield blue; struct fb_bitfield transp; /* 透明度 */ /* */ ;,可见显示屏大小,虚拟显示屏大小,虚拟显示屏偏移量,FrameBuf

10、fer驱动结构,FrameBuffer驱动结构,固定屏幕信息数据结构: struct fb_fix_screeninfo char id16; /* 辨识字符串 */ unsigned long smem_start; /* 帧缓冲起始地址(物理地址) */ _u32 smem_len; /* 帧缓冲内存的长度 */ _u32 type; _u32 type_aux; /* 隔行扫描位平面的插入值 */ _u32 visual; _u16 xpanstep; _u16 ypanstep; _u16 ywrapstep; _u32 line_length; /* 每行字节数 */ unsigne

11、d long mmio_start; /* 内存映射I/O起始地址(物理地址)*/ _u32 mmio_len; /* 内存映射I/O的长度 */ _u32 accel; /* 表示驱动的细节 */ _u16 reserved3; /*为兼容保留 */ ;,FrameBuffer驱动结构,#define Width 640 #define Height 480 int fd; unsigned char* framebuffer; fd = open (“/dev/fb0“, O_RDWR); framebuffer = mmap (NULL, Width*Height, PROT_READ|

12、PROT_WRITE,MAP_SHARED,fd,0); /* 显示区域操作 */ /* */ close(fd);,mmap将显示内存映射到用户空间,返回值为显示内存的首地址指针。,11.3 以太网络驱动,Linux以太网的应用 Linux网络驱动结构,Linux以太网的应用,以太网协议层次,Linux以太网的应用,NE2000以太网芯片,如:Realtek的RTL8019 Cirrus Logic的CS8900,网络芯片和处理器,多使用总线方式相连,还需要中断引脚。,Linux网络驱动结构,Linux以太网的应用,网络驱动程序的核心数据结构struct net_device在/includ

13、e/linux目录的netdevice.h中定义,其成员比较多。 struct net_device char nameIFNAMSIZ; /* . . */ unsigned long mem_end; unsigned long mem_start; unsigned long base_addr; unsigned int irq; /* . . */ unsigned char if_port; unsigned char dma; unsigned long state; struct net_device *next; int (*init)(struct net_device *dev); /* . . */ ,驱动程序的初始化函数,Linux以太网的应用,net_device部分成员,Linux以太网的应用,网络驱动的初始化函数在网络设备注册后,使用其init函数指针完成。,网络驱动的使用hard_start_xmit函数指针实现数据的发送,注册中断实现数据接收。,11.4 Linux驱动程序总结,在Linux操作系统中,驱动程序是操作系统(OS)和硬件(hardware)的接口。 在Linux中,驱动程序是一种框架,既有最简单的字符设备驱动程序,也有串口、帧缓冲,以太网以及IIC、各种存储器多种多样的驱动程序框架。 数据结构 初始化 功能实现,课程结束,

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

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