Linux行走(1)——第一个驱动程序

本文介绍如何在Linux系统中创建并注册第一个设备驱动程序,包括使用平台设备和平台驱动的概念,以及如何在Kconfig和makefile中进行配置。详细步骤包括源代码解析、Kconfig和makefile的添加、编译与验证加载过程。
摘要由CSDN通过智能技术生成

first_driver.c

#include <linux/module.h>

#include <linux/init.h>
#include <linux/platform_device.h>
#include <linux/cdev.h>
#include <linux/fs.h>


static int chrdev_probe(struct platform_device *dev)
{
printk(KERN_ALERT"chrdev probe! \n");
return 0;
};
/*platform_device 结构体*/
static struct platform_device chrdev_platform_device =
{
.name = "swj_first_driver",
.id = 0,
.dev = { },
};
/*platform_driver 结构体,name一定要一致,否则无法匹配到*/
static struct platform_driver chrdev_platform_driver = 
{
.probe = chrdev_probe,
.driver = {
.name = "swj_first_driver",
.owner = THIS_MODULE,
},
};








static __init int chrdev_init(void)
{
int ret = 0;
printk(KERN_ARERT"chrdev init!\n");
//注册设备
ret = platform_device_register(&chrdev_platform_device);


if(ret)
{
printk(KERN_ARERT"platform_device_register failed!\n");
return ret;
}
  //注册驱动
ret = platform_driver_register(&chrdev_platform_driver);


if(ret)
{
printk(KERN_ARERT"platform_driver_register failed!\n");
}


printk(KERN_ALERT"chrdev_init ok! \n");


}




static __exit void chrdev_exit(void)
{
printk(KERN_ALERT "chrdev exit! \n");
platform_driver_unregister(&chrdev_platform_driver);
}


/*module_init 这个宏在模块的目标代码中增加特殊段,
用于说明内核初始化函数的所在位置*/
module_init(chrdev_init);
/* 用于说明内核退出的所在位置
*/
module_exit(chrdev_exit);  




MODULE_LICENSE("Dual BSD/GPL");  




由于对于Linux的陌生 我只能是照搬照抄

下面就是添加相应的Kconfig 和 makefile文件了

首先定义使用的宏 我是高通平台

所以我定义在code/kernel/arch/arm/configs/J101_BLU_defconfig

CONFIG_FIRST_DRIVER=y

由于我将first_driver.c添加到 /code/kernel/drivers/media/video/msm/目录下 所以这里要修改这里的Kconfig 和 makefile


找一个比较中间的地方添加,其实顺序无所谓只不过我个人感觉这样安全。

Kconfig 添加代码如下

config FIRST_DRIVER

bool "first driver"

        default n

       ---help---

          this is my first android driver

makefile下面添加代码如下

obj-$(CONFIG_FIRST_DRIVER) += first_driver.o


然后编译kernel 即可 

然后通过adb shell cat /proc/kmsg > kernel.txt

抓取log 看里面的log 有没有打出即可知道是否加载成功。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值