linux驱动1

本文介绍了内核驱动开发的基本步骤,包括模块编译、加载与卸载过程,并详细解释了如何通过日志系统进行错误排查与性能监控。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

学习方法:一边写驱动一边分层次读内核代码


基础需求:
具有硬件知识
了解内核基础知识
了解内核中的并发控制和同步(例如声卡同时控制两种声音)
复杂的软件结构框架


特点:
隐藏硬件细节,提高应用软件的可移植性
提高安全性
提高机制而不是策略






加载入口点———>module_init(hello_init)加载函数
卸载入口点———>module_exit(hello_exit)卸载函数


函数名加static
hello_init,hello_exit只被调用一次
printk(优先级"");//内核级的函数,优先级从小到大递减;KERN_ALERT=<1>.输出到日志文件(低优先级)或终端(高优先级)
insmod 加载模块
rmmod 卸载模块
dmesg:查看日志文件
cat /proc/sys/kernel/printk查看日志优先级
uname -r:查看系统版本
lsmod | grep hello
obj–y用来定义哪些文件被编进( built-in)内核
obj-m用来定义哪些文件被编译成可加载模块( Loadable module )
lib-y用来定义哪些文件被编成库文件
obj-y、obj-m还可以用来指定要进入的下一层子目录


模块编译,加载/卸载:




1、准备好内核树,配置、编译好内核(内核树=系统源码)
2、为模块创建makefile文件make -C 内核树所在目录 M=`pwd` modules(目标文件名)
make -C /root/mini2440/linux-2.6.32.2 M=/home/cqq/driver modules




模块参数
module_param(参数名,参数类型,参数读写权限)  //charp表示字符型指针


卸载失败:
mkdir /lib/modules
mkdir /lib/modules/2.6.32···
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值