打印

驱动程序的配置与编译

[复制链接]
164|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
大碴子味|  楼主 | 2018-9-27 17:04 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在完成了驱动程序代码的编写之后,接下来的任务就是编译。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_hello_module.c              */

/*简介:HelloWorld           */

/***********************************************************************************************/

#include<linux/init.h>

#include<linux/module.h>

MODULE_LICENSE("Dual BSD/GPL");

static int hello_module_init(void)

{

        printk(KERN_ALERT"Hello,world/n");

        return 0;

}

static void hello_module_exit(void)

{

        printk(KERN_ALERT"Goodbye, world/n");

}

module_init(hello_module_init);

module_exit(hello_module_exit);

step2: 在char 目录下打开Kconfig(可以理解为是内核的配置脚本)

添加

config MINI2440_HELLO_MODULE

       tristate "Mini2440/QQ2440 module 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

则对内核中所有配置为模块的驱动程序进行编译了

使用特权

评论回复

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

372

主题

372

帖子

0

粉丝