linux驱动开发 | 内核自带led驱动

一、基础知识

想把系统自带的led驱动使用起来,必须先启用这个配置
在内核根目录下,输入make menuconfig即可打开图形化配置界面
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
选择当前项并启动,输入y选中,输入n取消选中
vi .config看下配置文件。复习下vi指令,ctrl+F下一页,ctrl+B前一页,G文档末尾,gg文档首行,nG(n是数字)移动到第n行,/向前查找,?向后查找,n继续查找
在这里插入图片描述
重新编译内核 make

看一些内核自带的led驱动,下面是路径
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
匹配成功会运行驱动结构体中的的probe函数
在这里插入图片描述
可以看出module_platform_driver是一个宏 展开来看 里面还是宏
在这里插入图片描述
在这里插入图片描述
下面把 这两个宏连接起来,先替换__driver,在替换__registr,在替换__unregister

static int __init gpio_led_driver_init(void) 
{ 
	return platform_driver_register(&(gpio_led_driver) , ##__VA_ARGS__); 
} 
module_init(gpio_led_driver##_init); 
static void __exit gpio_led_driver##_exit(void) 
{ 
	platform_driver_register(&(gpio_led_driver) , ##__VA_ARGS__); 
} 
module_exit(gpio_led_driver##_exit);

VA_ARGS 是一个可变参数的宏,很少人知道这个宏,这个可变参数的宏是新的C99规范中新增的,目前似乎只有gcc支持(VC6.0的编译器不支持)。
实现思想就是宏定义中参数列表的最后一个参数为省略号(也就是三个点)。这里不使用,删掉即可

下面来把这个led配置为系统心跳led

首先修改设备树,在根节点下增加


	dtsleds {
		compatible = "gpio-leds";

		led0 {
			label = "red";
			gpios = <&gpio1 3 GPIO_ACTIVE_LOW>;
			linux,default-trigger = "heartbeat";
			default-state = "on";
		};
	};

重新编译设备树 make dtbs
然后拷贝到tftp目录里,sudo cp arch/arm/boot/dts/imx6ull-alientek-nand.dtb /home/zys/linux/tf
tpboot/ -f
再把linux系统也编译了,因为之前打开了led的配置嘛,直接make
将zImage拷贝到tftp,sudo cp arch/arm/boot/zImage /home/zys/linux/tftpboot/ -f

重启开发板 可以看到红色的led在跳动

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值