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

linux 驱动 编译加载 , 程序搬移到目标板,驱动源码和头文件位置

2012-08-25 12:47 701 查看
1:驱动源码和头文件位置

/linux-2.6.32.2/drivers/char

linux-2.6.32.2/include

 

linux-2.6.32.2/arch/arm/mach-s3c2410/include/mach/    //这个目录的头文件在make的过程中会被copy到linux-2.6xx/include目录

linux-2.6.32.2/arch/arm/plat-s3c24xx/gpio.c

 

 

2:程序搬移到目标板

  串口使用命令:  mount -t nfs -o nolock 192.168.0.46:/home/hgj /mnt

  要注意在服务端开启nfs服务,在 /etc/exports目录设置好共享目录

 

3:驱动 编译加载

Step1:编辑配置文件Kconfig,加入驱动选项,使之在 make menuconfig的时候出现

打开linux-2.6.32.2/drivers/char/Kconfig文件 修改添加模块名称 ,

保存退出, 这时在 linux-2.6.32.2目录位置运行一下 make menuconfig 就可以在 Device

Drivers Æ Character devices 菜单中看到刚才所添加的选项了,按下空格键将会选择为<M>,

此意为要把该选项编译为模块方式;再按下空格会变为<*>,意为要把该选项编译到内核中,

在此我们选择<M>

Step2:通过上一步,我们虽然可以在配置内核的时候进行选择,但实际上此时执行

编译内核还是不能把 mini2440_hello_module.c 编译进去的,还需要在 Makefile 中把内核配置

选项和真正的源代码联系起来,打开 linux-2.6.32.2/drivers/char/Makefile,添加模块依赖文件,注意模块名称要和在上面的Kconfig文件中

添加的模块名称一致.

 
Step3:这时回到linux-2.6.32.2源代码根目录位置,执行 make modules,就可以生成

我们所需要的内核模块文件 mini2440_hello_module.ko了

set4:通过nfs服务,把上面的模块文件复制到目标板/lib/modules/2.6.29目录.

set5:然后再板子终端中执行#modprobe mini2440_hello_module         . 删除模块为:#rmmod mini2440_hello_module   ,显示有哪些:lsmod

 

step6;模块在应用中调用方法:直接使用/dev/加设备名打开.

比如: int fd  = open("/dev/leds", 0);  // 打开设备-1;

 

那么设备名怎么来的呢, 在 驱动的注册函数中定义的:

static struct miscdevice misc = {

 .minor = MISC_DYNAMIC_MINOR,

 .name = DEVICE_NAME,

 .fops = &dev_fops,

};

 

ret = misc_register(&misc);

 

 

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息