实验四、设备驱动移植
- 格式:doc
- 大小:945.01 KB
- 文档页数:18
实验内容三—设备驱动移植
一、实验目的
(1)了解LCD显示原理及其与S3C2410的接口
(2)了解S3C2410的LCD控制器
(3)掌握基于帧缓冲设备的LCD驱动程序结构及移植过程
二、实验内容
在上次实验的基础上,通过修改内核显示相关文件,达到驱动LCD显示屏的目的。三、实验步骤
(1)实验准备
从网上下载Linux的最新版本,解压后可以看到它的全部源代码,我们这里以linux-2.6.24为例,实现Linux的内核移植。
(2)修改顶层Makefile
在顶层Makefile中先要定义交叉编译器,这里就使用我们第一次实验中构建的交叉编译器。查找ARCH,在193行左右修改确认ARCH和CROSS_COMPILE的值
如果学生机上没有交叉编译环境,先从教师机上下载交叉编译环境
为了方便使用arm-linux-gcc,我们可以把它所在的目录添加到环境变量中
在export PATH前面加上
这样一句,以后启动就可以直接使用arm-linux-gcc了。
要使环境变量立马生效,可以使用下面的命令。
(3)设置Nand Flash分区信息表
设置Nand Flash的分区信息表是为内核启动以后加载文件系统用的,可以将Nand Flash看成我们PC机的硬盘,对Nand Flash的分区看成是对硬盘的分区,硬盘可以分成C 盘,D盘之类,而Nand Flash则可以分成很多块,每块有不同的名字、大小和用途。下面是对Super-ARM实验箱的Nand Flash进行分区的情况(参考表5-1-1):
➢第0块命名为"uboot",它用来存放u-boot.bin映像,起始地址是Nand Flash的0x000000,最大0x30000个字节;
➢第1块命名为"kernel",用来存放内核,起始地址是Nand Flash的0x30000,最大0x1D0000个字节;
➢第2块命名为"rootfs",用来存放根文件系统,起始地址是Nand Flash的0x200000,最大30M字节;
➢第3块命名为"ext-fs1",留给用户存放其他文件系统,起始地址是Nand Flash 的0x2000000,最大32M字节;
至于具体要怎么分,这样根据你的目标机的Nand Flash来定,不能一概而论。分区的方法就是修改arch/arm/plat-s3c24xx目录下的common-smdk.c文件:
执行gedit arch/arm/plat-s3c24xx/common-smdk.c命令,找到:static struct mtd_partition smdk_default_nand_part[],在其中填入下面的内容(将原来的内容覆盖)
(4)进入内核顶层目录,修改arch/arm/mach-s3c2410/mach-smdk2410.c文件
➢第一处:添加下面的头文件
➢第二处:添加s3c2410fb_display 结构
上面这些参数的值都来自表13-1-4,计算方法如下:
●xres = LINEV AL + 1
●yres = HOZV AL + 1
●pixclock = (1/hclk) ×1012 其中Super-ARM的hclk是10.14Mhz ●left_margin = HFPD + 1
●right_margin = HBPD + 1
●hsync_len = HSPW+1
●upper_margin = VBPD +1
●lower_margin = VFPD+1
●vsync_len = VSPW+1
➢第三处:添加s3c2410fb_mach_info 结构
关于gpccon,gpcup,gpdcon,gpdup的设置参考表13-2-13,gpccon_mask,gpcup_mask,gpdcon_mask,gpdup_mask的设置也很简单,如果某个端口配置成LCD功能,就把该端口对应的位都设置成1,其它没用的就设为0。
➢第四处:在函数smdk2410_init()中加入下面一行
我跟大家分析一下添加这些代码的具体作用。首先看smdk2410_fb_info(第三处),它是s3c2410fb_mach_info类型的结构体,这个结构体有一个displays的成员变量,它指向
s3c2410fb_display类型的指针。之前说过,一个系统有多少个显示设备就对应多少个
s3c2410fb_display的结构,Super-ARM只有一个LCD显示设备,所以就只定义了一个
s3c2410fb_display结构体smdk2410_lcd_cfg(第二处),那么displays就指向这个结构体,同时将num_displays赋值1。最后通过s3c24xx_fb_set_platdata函数将smdk2410_fb_info传递给底层LCD驱动。
(5)添加devfs文件系统支持
为了我们的内核支持devfs,以及在启动时能自动挂载/dev。编辑fs/Kconfig:在907行menu "Pseudo filesystems"下面添加如下代码:
(5)配置内核
首先执行make s3c2410_defconfig命令获取s3c2410_defconfig文件中给定的配置。然后执行make menuconfig命令配置内核
将出现以下图形配置界面:
➢第一项:选择设备CPU类型
在这个选单中,选择system type -->s3c2410 machines中的smdk2410,其它的arch-machines全部取消。