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

来源:互联网 发布:淘宝开手机店保证金 编辑:程序博客网 时间:2024/05/29 18:19
在内存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执行,如果以上都没有什么意外的话就能看到,自己要的效果了 呵呵 加油





原创粉丝点击