Linux驱动添加的基本流程

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执行,如果以上都没有什么意外的话就能看到,自己要的效果了 呵呵 加油


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值