博客
关于我
linux内核3.4 led驱动,4.移植驱动到3.4内核-移植总结
阅读量:801 次
发布时间:2023-02-03

本文共 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

  • 编译 tslib 驱动:
    make cleanmake
  • 安装到板子上:
    make install
  • 4.2 常见问题

    • 如果出现 "selected device is not a touchscreen I understand" 错误,请检查触摸屏设备配置是否正确
    • 注意 3.4 内核与 tslib 的版本兼容性问题,需确保 EV_VERSION 定义一致
      #define EV_VERSION 0x010001

    以上内容可根据实际需求进行扩展和调整,建议在实际操作前进行充分测试。

    转载地址:http://mtzfk.baihongyu.com/

    你可能感兴趣的文章
    mysql 快照读 幻读_innodb当前读 与 快照读 and rr级别是否真正避免了幻读
    查看>>
    MySQL 快速创建千万级测试数据
    查看>>
    mysql 快速自增假数据, 新增假数据,mysql自增假数据
    查看>>
    MySql 手动执行主从备份
    查看>>
    Mysql 批量修改四种方式效率对比(一)
    查看>>
    mysql 批量插入
    查看>>
    Mysql 报错 Field 'id' doesn't have a default value
    查看>>
    MySQL 报错:Duplicate entry 'xxx' for key 'UNIQ_XXXX'
    查看>>
    Mysql 拼接多个字段作为查询条件查询方法
    查看>>
    mysql 排序id_mysql如何按特定id排序
    查看>>
    Mysql 提示:Communication link failure
    查看>>
    mysql 插入是否成功_PDO mysql:如何知道插入是否成功
    查看>>
    Mysql 数据库InnoDB存储引擎中主要组件的刷新清理条件:脏页、RedoLog重做日志、Insert Buffer或ChangeBuffer、Undo Log
    查看>>
    mysql 数据库中 count(*),count(1),count(列名)区别和效率问题
    查看>>
    mysql 数据库备份及ibdata1的瘦身
    查看>>
    MySQL 数据库备份种类以及常用备份工具汇总
    查看>>
    mysql 数据库存储引擎怎么选择?快来看看性能测试吧
    查看>>
    MySQL 数据库操作指南:学习如何使用 Python 进行增删改查操作
    查看>>
    MySQL 数据库的高可用性分析
    查看>>
    MySQL 数据库设计总结
    查看>>