Linux驱动的配置和编译脚本

  在完成了驱动程序代码的编写之后,接下来的任务就是编译。linux内核编译的过程是通过内核源码的根目录和各子目录中的Makefile分级管理的。其中根目录的Makefile是最重要的,它可以看成是其他Makefile最初的入口。它负责定义所有与体系结构无关的变量和目标,读取.config文件,并根据其信息最终生成vmlinux(elf格式的Linux内核)和modules(模块)。make通过向下递归调用子目录下的Makefile来编译这两个目标。

     通常希望把驱动程序放在内核里,在配置内核时可以自由裁剪。这需要对内核配置脚本Kbuild有一定得了解。具体可以参考内核源码中的Documentation/kbuild目录下的相关文档

    Kbuild是一组很容易使用的脚本。通常只需要关心个目录下的两个文件:Kconfig(2.6内核)和Makefile。

    以hello模块为例

    step1:代码编写

mini2440_hello_module.c 放置的位置/opt/FriendlyARM/mini2440/linux2.6.29/drivers/char
代码如下

/**********************************************************************************************/
/*文件:mini2440_hello1_module.c              */
/*简介:HelloWorld           */
/***********************************************************************************************/
#include<linux/init.h>
#include<linux/module.h>
MODULE_LICENSE("Dual BSD/GPL");

static int hello1_module_init(void)
{
        printk(KERN_ALERT"Hello,world/n");
        return 0;
}
static void hello1_module_exit(void)
{
        printk(KERN_ALERT"Goodbye, world/n");
}

module_init(hello1_module_init);
module_exit(hello1_module_exit);

step2: 在char 目录下打开Kconfig(可以理解为是内核的配置脚本)
添加
config MINI2440_HELLO1_MODULE
       tristate "Mini2440/QQ2440 module1 sample"
       depends on ARCH_S3C2440
       default m if MACH_FRIENDLY_ARM_MINI2440
       help
          mini2440/QQ2440 module_sample

step 3:然后进入linux 2.6.29 目录下
$make menuconfig
在出现的页面下选择device Drivers---> 回车
   Character devices     回车
   选中 Mini2440/QQ2440 module1 sample
               按空格键进行切换到M
则配置完成

step 4 : drivers/char目录下
打开Makefile文件
添加内容如下
obj-$(CONFIG_MINI2440_HELLO1_MODULE) += mini2440_hello1_module.o

step 5: 在linux 2.6.29目录下
输入命令 $make modules
则对内核中所有配置为模块的驱动程序进行编译了

 

你可能感兴趣的:(linux,Module,脚本,character,makefile,linux内核)