2440的驱动的研究

 一 。 编译器 : 不同版本的编译器不一样,使用的时候得注意 ,不一定高版本的支持的功能就越多或者兼容的越多

 arm-linux-gcc-4.3.2.tar.bz2 用于编译u-boot2012.04.01和linux3.4.2

arm-linux-gcc-3.4.5-glibc-2.3.6.tar.bz2用于编译u-boot1.16和linux2.6.22.6
 
二  、以下是模块的MAKEFILE文件
KERN_DIR = /work/system/linux-2.6.22.6
all:
 make -C $(KERN_DIR) M=`pwd` modules
clean:
 make -C $(KERN_DIR) M=`pwd` modules clean
 rm -rf modules.order
obj-m += buttons.o
    其中    KERN_DIR = /work/system/linux-2.6.22.6  是内核的路径
     注意 :1、这个内核是开发板的内核、
                 2、这个内核的路径在虚拟机的  /work/system/  ,是将开发板的内核源文件解压,配置编译后的文件,其中的uimage 可以下载进开发板
 
 
三、驱动的程序的理解:
         1、init ,exit    这两个是加载程序和卸载程序,是在系统应用程序(调用该驱动的程序)运行之前进行操作的,因为驱动的使用套路基本是文件操作,在读写文件之前没有文件怎么可以。
         2、应用程序调用的时候驱动程序使用   open  close 等等操作驱动,所以驱动程序中有与之对应的程序
         3、在操作系统上编程,必须使用重映射,这也就是stm32不能运行linux的一个最大原因之一
         4、应用程序不能直接进入内核,所以不能直接操作驱动,只能通过copy_to_user 和 copy_from_user 这两个函数,只能出现在驱动中,因为驱动是主动方, 个人猜测 : 驱动可以接收应用程序传来的数据,也可以发送。但是当遇到错误的时候,驱动可以不搭理应用程序,保护自己。
 
        
            
                  
 
 
 
要有韧性
原文地址:https://www.cnblogs.com/niuxiaojie521/p/11119476.html