
linux内核3.4 led驱动,4.移植驱动到3.4内核-移植总结
删除前两行: 替换 替换 添加头文件: 编译并测试 编译驱动: 在设备驱动中: 使用示例: 编译 tslib 驱动: 安装到板子上:
发布日期:2025-04-08 11:27:24
浏览次数:7
分类:精选文章
本文共 2163 字,大约阅读时间需要 7 分钟。
Linux 内核 3.4 系统移植与适配指南
1. 常用函数改动
1.1 device_create()
作用: 创建设备节点
替代函数: 消除了 2.6 内核中的class_device_create()
函数注意事项: - 使用前需包含头文件:
#include <asm/device.h>
- 该函数与 2.6 内核下的
mdev_create()
类似
1.2 device_destroy()
作用: 卸载设备节点
替代函数: 消除了 2.6 内核中的class_device_destroy()
函数注意事项: - 使用前需包含头文件:
#include <asm/device.h>
- 与
device_create()
配合使用
1.3 usb_alloc_coherent()
**作用:**申请 USB 缓冲区,确保内存与硬件缓存一致性
替代函数: 消除了 2.6 内核中的usb_buffer_alloc()
函数注意事项: - 使用前需包含头文件:
#include <asm/usb.h>
1.4 usb_free_coherent()
作用: 释放 USB 缓冲区
替代函数: 消除了 2.6 内核中的usb_buffer_free()
函数注意事项: - 使用前需包含头文件:
#include <asm/usb.h>
1.5 blk_fetch_request()
作用: 获取块设备中的一个申请(主要用于读写块设备扇区)
替代函数: 消除了 2.6 内核中的elv_next_request()
函数注意事项: - 使用时需注意
request
结构体的处理
1.6 __blk_end_request_cur()
作用: 完成当前获取的请求结构体
替代函数: 消除了 2.6 内核中的end_request()
函数注意事项: - 返回值为 0 表示当前申请已完成
error
为 0 表示读写扇区成功,error < 0
表示失败
2. 结构体改动
2.1 struct net_device 结构体
改动方向: 2.6 内核下的 net_device
结构体成员(与操作相关)已移至 net_device_ops
结构体下
- 2.6 内核:
net_device->hard_start_xmit(); // 发包函数net_device->tx_timeout(); // 发包超时处理函数
- 3.4 内核:
net_device->net_device_ops->ndo_start_xmit(); // 发包函数net_device->net_device_ops->ndo_tx_timeout(); // 发包超时处理函数
3. 宏改动
3.1 管脚宏改动
替代宏: S3C2410_GPA(0) ~ S3C2410_GPM(0)
- 使用前需包含头文件:
#include <asm/arch/gpio.h>
3.2 互斥信号量改动
替代宏: static DEFINE_SEMAPHORE(name);
- 替代了 2.6 内核中的
DECLARE_MUTEX(name)
宏 - 如需初始化信号量值为 0,请自定义:
struct semaphore name;// 在初始化函数中调用:sema_init(&name, 0)
3.3 移植 LED 为例
3.3.1 Makefile 修改
将内核位置改为:
KERN_DIR = /work/system/linux-3.4.2
3.3.2 编译错误修复
根据错误信息,修改 first_drv.c
:
// #include // #include
class_device_create()
为 device_create()
class_device_unregister()
为 device_unregister()
#include
3.3.3 移植 LCD 为例
make uImagemake modules
- 去除内核自带的 LCD 驱动
- 在
drivers/video
下的文件添加到nfs
文件系统中
insmod cfbcopyarea.koinsmod cfbfillrect.koinsmod cfbimgblt.koinsmod 9th_lcd.ko
3.3.4 使用示例
echo "Hello, World!" > /dev/lcdcat /dev/lcd
4. 移植触摸屏
4.1 安装 tslib
make cleanmake
make install
4.2 常见问题
- 如果出现
"selected device is not a touchscreen I understand"
错误,请检查触摸屏设备配置是否正确 - 注意 3.4 内核与 tslib 的版本兼容性问题,需确保 EV_VERSION 定义一致
#define EV_VERSION 0x010001
以上内容可根据实际需求进行扩展和调整,建议在实际操作前进行充分测试。
发表评论
最新留言
感谢大佬
[***.8.128.20]2025年05月08日 08时58分16秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
Linux中执行 .sh 的方法
2023-02-03
Linux中最低调、最易让人忽视的tmp目录,原来用处那么大!
2023-02-03
Linux中最基本的命令ls的用法有哪些?
2023-02-03
Linux中的read命令详解:交互性脚本编写的利器
2023-02-03
linux中的分号&&和&,|和||说明与用法
2023-02-03
linux之sort命令的用法
2023-02-03
linux之stat命令
2023-02-03
Linux之V4L2基础编程
2023-02-03
linux之系统命令(非常详细)零基础入门到精通,收藏这一篇就够了
2023-02-03
linux云服务器开启防火墙注意事件
2023-02-03
linux互传文件nc命令
2023-02-03
linux交换空间设置
2023-02-03
linux作业整理
2023-02-03
linux使用g++
2023-02-03
Linux使用XVFB做Selenium测试
2023-02-03
Linux信号量编程实例
2023-02-03
Linux修改root用户名,密码及别名
2023-02-03
Linux入门——权限
2023-02-03
Linux入门之软件包管理yum的使用
2023-02-03