您的位置:首页 > 运维架构 > Linux

Linux驱动添加的基本流程(SDRAM中调试驱动)

2011-11-29 20:51 225 查看
在内存SDRAM中调试驱动

NFS和TFTP可以正常使用

首先将NFS根文件系统和最基本的内核搭建起来,系统能跑OK

1 按驱动框架编写驱动程序 (例如为字符设备)

文件名为:“HX_at91_led.c”



2 修改在内核源码中添加对驱动的支持

修改“Kconfig”文件(/drivers/char/)(字符驱动在此添加,其他驱动在相应的文件目录下添加即可)

在适当的位置添加(加以注释能和原来的区别开来)

menu “Character devices”

#######################################################

config HX_LED(最好大写)

tristate "xxx LED Driver"

(""内的内容在makemenuconfig 时能看见)

depends on ARCH_AT91SAM9260

help

xxxxx (主要是添加些注释以便能知道该驱动是什么驱动)

以后添加驱动就在此结构下类似添加

#######################################################

3 修改同目录下的“Makefile”文件(/drivers/char/)

添加如下:

在obj -y +=mem.o random.o tty_io.o n_tty.o tty_ioctl.o .........

#######################################################

obj-$(CONFIG_HX_LED) += HX_at91_led.o (此处的HX_LED要和Kconfig文件中config HX_LED(最好大写)一致)



以后可以在如下添加新的驱动程序

#######################################################

其中CONFIG_HX_LED的HX_LED必须和2 Kconfig文件中的config HX_LED(最好大写)一致

其中HX_at91_led.o的HX_at91_led必须和1 驱动程序HX_at91_led.c的名称一致

4 配置内核(内核主目录下):

#make menuconfig ARCH=arm

选择原来的配置文件进行修改(at91sam9260ek_defconfig在此文件的基础上修改添加)

Device Drivers --->

Character devices --->

<M> xxx LED Driver

选择刚刚编写的驱动程序为模块方式编译 选为M 或者是直接模式

5 编译内核

清除之前的编译文件

make distclean CROSS_COMPILE=arm-none-linux-gnueabi-

(告诉编译器参数,不需要修改Makefile,个人比较喜欢)

选择刚刚修改过的配置文件进行配置

make at91sam9260ek_defconfig ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi-

进行编译

make uImage ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi-

在内核目录/arch/arm/boot/目录下会有zImage和uImage文件即编译好的内核文件

使用工具

mkimage -n 'linux-2.6.34' -A arm -O linux -T kernel -C none -a 0x20008000 -e 0x20008040 -d zImage linux-2.6.34_uImage.img

将生成的zImage文件添加64字节,成为bootm能够识别的文件格式。(此命令生成的linux-2.6.34_uImage.img只能下载到20008000启动执行)

将linux-2.6.34_uImage.img拷贝到tftp文件夹下

开发板上电,tftp加载新的内核,nfs加载文件系统

6 编译驱动程序模块程序.ko文件

在内核目录下

make SUBDIR=drivers/char modules ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi-

在此编译过程中可能会产生问题,致使编译停止,需要自己修改其中的问题,能力的体现,呵呵

顺利编译通过后在drivers/char/目录下会生成xxx.ko文件

7 编写测试程序

编写测试程序.c 和Makefile (此处是驱动开发人员的必须工作)

要解决的问题

头文件的具体作用,具体每个文件的用处?????????????????????????

编译生成可执行文件

8 将驱动模块程序

在drivers/char/目录下会生成xxx.ko文件 拷贝到 根文件rootnfs/lib/modules/2.6.34/目录下

在编写测试程序的可执行文件 拷贝到 根文件rootnfs/sbin/目录下

修改两个拷贝文件的执行权限 chmod 777 文件名

9 最后一步也是最最重要的就是建立设备节点,为什么要建立还不是很理解,需要研究

在开发板的文件系统下 mknod /dev/设备节点名 驱动类型 250 0 ()

在开发板的文件系统下 mknod /dev/leds c 250 0

其中设备节点名要和应用程序中的打开fd = open(DEVICE_NAME, O_RDONLY);中有关

其中#define DEVICE_NAME "/dev/leds"

对于为什么要建立这个文件要分析下,驱动开发者必须知道的内容啊?????????????????????

10执行,如果以上都没有什么意外的话就能看到,自己要的效果了 呵呵 加油
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: