mydrv.c
这个驱动需要匹配到设备树才会加载
c
#include <linux/module.h>
#include <linux/platform_device.h>
#include <linux/of.h>
static int my_probe(struct platform_device *pdev)
{
printk(KERN_INFO "mydrv: probe success!\n");
return 0;
}
static int my_remove(struct platform_device *pdev)
{
printk(KERN_INFO "mydrv: remove\n");
return 0;
}
/* 设备树匹配表 */
static const struct of_device_id my_of_match[] = {
{ .compatible = "ming,mydrv" },
{ }
};
MODULE_DEVICE_TABLE(of, my_of_match);
/* Platform Driver */
static struct platform_driver my_driver = {
.probe = my_probe,
.remove = my_remove,
.driver = {
.name = "mydrv",
.of_match_table = my_of_match,
},
};
module_platform_driver(my_driver);
MODULE_LICENSE("GPL");
MODULE_AUTHOR("ming");
MODULE_DESCRIPTION("Minimal Platform Driver");
my_key.c
这个驱动没用probe ,不需要匹配设备树
c
#include <linux/types.h>
#include <linux/kernel.h>
#include <linux/delay.h>
#include <linux/ide.h>
#include <linux/init.h>
#include <linux/module.h>
static int __init mykey_init(void)
{
printk("============= do mykey_init===================");
return 0;
}
static void __exit mykey_exit(void)
{
}
/* 驱动模块入口和出口函数注册 */
module_init(mykey_init);
module_exit(mykey_exit);
MODULE_AUTHOR("mykey");
MODULE_DESCRIPTION("ming Key Driver");
MODULE_LICENSE("GPL");
拷贝驱动源码
bash
将 my_key.c 拷贝到
linux-xlnx-xlnx_rebase_v5.4_2020.2/drivers/char/
修改MakeFile
linux-xlnx-xlnx_rebase_v5.4_2020.2/drivers/char/Makefile的最下方追加
bash
obj-y += my_key.o
测试
bash
zynq-pinctrl 700.pinctrl: zynq pinctrl initialized
dma-pl330 f8003000.dmac: Loaded driver for PL330 DMAC-241330
dma-pl330 f8003000.dmac: DBUFF-128x8bytes Num_Chans-8 Num_Peri-4 Num_Events-16
============= do mykey_init===================
brd: module loaded
loop: module loaded