标签:
一.系统功能框架:
U-boot : 启动内核
linux kernel: 启动应用
应用: open,read,write 都是通过C库实现,汇编就相当于swi val,引发中断,通过系统调用接口在异常中断调用不同处理函数(VFS)。
二.字符设备驱动框架:
1.编写驱动:open , read, write 等功能函数的实现:
static int led_drv_open(struct inode *inode, struct file *file){
printk("led_drv_open\n");
return 0;
}
static int led_drv_write(struct file *file, const char __user *buf, size_t count, loff_t* ppos){
printk("led_drv_write\n");
return 0;
}
2.注册驱动:
①构造file_operations结构:
static struct file_operation led_drv_fops = {
.owner = THIS_MODULE,
.open = led_drv_open,
.write = led_drv_write,
}
②注册驱动:
入口函数:int led_drv_init(void){
register_chrdev(major, "led_drv", &led_drv_fops); //注册字符设备,major-主设备号 mior-次设备号,app根据设备类型和主设备号调用具体驱动。
return 0;
}
修饰入口函数: module_init(led_drv_init);
出口函数:void led_drv_exit(void){
unregister_chrdev(major, "led_drv");
}
修饰出口函数: module_exit(led_drv_exit);
Makefile :
KERN_DIR=/work/system/linux-2.6.22.6 //本地编译过的linux源码目录
all:
make -C $(KERN_DIR) M=`pwd` modules
clean:
make -C $(KERN_DIR) M=`pwd` modules clean
rm -rf modules.order
obj-m += led_drv.o
标签:
原文地址:http://www.cnblogs.com/blogs-of-lxl/p/5865613.html