android源码:在kernel目录下增加一个驱动

1.在kernel/msm-4.4/drivers文件夹中增加一个frist_driver文件夹

    对应有以下文件:

frist_driver/

├── frist_driver.c            //源代码

├── Kconfig                   //config控制脚本

└── Makefile                  //该目录的编译规则

2.源代码frist_driver.c分析:

    本章注重怎么在kernel下增加驱动模块,不纠结于驱动怎么编写

#include <linux/init.h>

#include <linux/module.h>



static int __init first_drv_init(void)

{

    printk("first_drv_init\n");

    return 0;

}

static void __exit first_drv_exit(void)

{

    printk("first_drv_exit\n");

}



module_init(first_drv_init);

module_exit(first_drv_exit);

MODULE_LICENSE("GPL");

3.编译规则

    要让kernel编译这个模块,要符合一下几点:

    a.让kernel知道这个模块存在(Kconfig作用)

        模块文件夹下的Kconfig;

frist_driver/Kconfig
    config FRIST_DRIVER                            //会在kernel编译的时候生成CONFIG_FRIST_DRIVER宏
        tristate "First Android Driver"            //tristate 是指模块中的y m n中三选一。其中y表示编译进内核镜像中,和Image融为一体,m是module,指编译成模块,成一个ko文件,可动态加载卸载,指的是不编译进内核,也不编译成模块。   后面的是该选项的名字,在menuconfig中会以该名称显示
         default m                                //默认值是M,如果你不选择
                help                              //解析说明,在menuconfig中和按help显示该内容
        This is the first android driver.         

       在drivers下的Kconfig后添加上述的Kconfig,指的是在kernel目录下执行menuconfig的时候能显示上述的配置.

......

+    source "drivers/frist_driver/Kconfig"

endmenu

b.让kernel按照自己的规则编译(Makefile)

    模块文件夹下的Makefile;

obj-$(CONFIG_FRIST_DRIVER)    += frist_driver.o   //CONFIG_FRIST_DRIVER是上述的Kconfig的宏,用户的配置决定了是否编译或者是怎么编译该模块。 += 表示在kernel原有的基础上添加frist_driver.o对象。frist_driver.o对应的是frist_driver.c文件

    同样的,也要drivers下Makefile添加上述的Makefile

obj-$(CONFIG_FRIST_DRIVER)      += frist_driver/    //解析同上,不再说明

4.在安卓系统中,上述都是源码,真正生成是在out/目录下。可以在out目录下编译

cd out/target/product/XXX(对应的机器目录)/obj/kernel/msm-4.4

make -j32  ARCH=arm64 CROSS_COMPILE=aarch64-linux-android- menuconfig                    //用户选择配置,生效的上述Kconfig

    Device Drivers  ---> <M> First Android Driver                                        //这里选择了M,也是会在kernel编译的时候生成#define CONFIG_FRIST_DRIVER m

make -j32  ARCH=arm64 CROSS_COMPILE=aarch64-linux-android- modules                       // modules表示在kernel中所有选M的都会编译

 

5.编译成功就可以在对应的目录下找到驱动了:

        drivers/frist_driver/frist_driver.ko

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值