首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

Linux驱动添加的基本流程

Linux驱动添加的基本流程

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