移植环境(红色粗字体字为修改后内容,蓝色粗体字为特别注意内容)
1,主机环境:VMare下CentOS 5.5 ,1G内存。
2,集成开发环境:Elipse IDE
3,编译编译环境:arm-linux-gcc v4.4.3,arm-none-linux-gnueabi-gcc v4.5.1。
4,开发板:mini2440,2M nor flash,128M nand flash。
5,u-boot版本:u-boot-2009.08
6,linux 版本:linux-2.6.32.2
7,参考文章:
嵌入式linux应用开发完全手册,韦东山,编著。
Mini2440 之Linux 移植开发实战指南
【1】LED 驱动原理及编写
在此介绍的LED 驱动实际上是一个十分典型的字符设备驱动程序,它就像学习C 语言时的“Hello,World”程序一样,代表了你对嵌入式Linux 驱动程序的入门认识,因此我们将对此驱动进行详细的介绍和分析,以便深入掌握编写驱动程序的
方法和原理。
说明:在 mini2440 的用户手册中,我们其实也已经介绍了LED 驱动,下面的内容也是基于用户手册而来的。
要写实际的驱动,就必须了解相关的硬件资源,比如用到的寄存器,物理地址,中断等,在mini2440 的原理图中,我们可以看到LED 的硬件连接是这样的:
查看 S3C2440 数据手册,可以知道,他们对应的硬件资源如下表
LED 序号 | 对应的GPIO | 对应的CPU 引脚 |
LED1 | GPB5 | K2 |
LED2 | GPB6 | L5 |
LED3 | GPB7 | K7 |
LED4 | GPB8 | K5 |
GPIO 是通用输入输出口的英文简称,在S3C2440 芯片中,很多的端口都是可复用的,GPIO 只是其中的一个功能,比如这里的GPB5 端口,既可以用作普通的GPIO,也可以用作专用功能nXBACK,因此我们需要设置相应的端口寄存器,以改变引脚的用途。
在这里,四个LED 是采用GPBCON 寄存器上的4 组2bit 位来配置对应引脚的用途。4组2bit 位的功能都一样:00 表示输入,01 表示输出,10 为特殊功能,11 是保留的。见下面的截图:
在mini2440 开发板中,
LED1 对应的是GPB5, GPB5 使用[11:10]位
LED2 对应的是GPB6, GPB6 使用[12:13]位
LED3 对应的是GPB7, GPB7 使用[14:15]位
LED4 对应的是GPB8, GPB8 使用[16:17]位
因此,驱动程序中需要先设置LED 为输出状态,也就是要把对应的GPBX 设置为01。
而 GPBDAT 寄存器用来对应4 个LED 的数值状态,GPBDAT5 就对应GPB5,GPBDAT6就对应GPB6,以此类推。根据原理图可以看出&#x