当前位置: 首页 > news >正文

【系统移植】(六)第三方驱动移植

【系统移植】(六)第三方驱动移植

文章目录

  • 【系统移植】(六)第三方驱动移植
    • 1.编译驱动进内核
      • 方法一:编译makefile
      • 方法二:编译kconfig
      • 方法三:编译成模块
    • 2.字符设备框架

编译驱动进内核
   a.  选择驱动存放目录 (或任意目录。源码下的drivers/char目录,同时修改目录下的makefile)
   b.  改Makefile
   c.  改Kconfig  (界面可配置)

编译驱动为独立的模块
   a. 配置为模块方式
   b. make modules 编译为模块
   c. 创建设备节点(应用访问驱动的入口)
   d. 运行测试驱动的应用程序

1.编译驱动进内核

一、驱动编译进内核Makefile
	1、首先找内核中是否已经支持设备的驱动  选配
	2、内核中没有的驱动移植进来 --第三方驱动移植

	将第三方驱动代码放到linux源码树中的driver目录中
	修改 Makefile Kconfig(界面配置) 
	修改过的和新添加的代码会重新编译
	程序需要在板子上运行 就需要使用交叉编译工具编译
	mknod /dev/led c或者b  主设备号  此设备号

方法一:编译makefile

  1. 选择驱动存放目录,源码下的drivers/char目录,同时修改目录下的makefile

image-20241221155810139

  1. 仿照其他文件的格式,编写同名文件的.o后缀

image-20241221160235703

  1. 回到源码顶层目录,执行make uImage编译内核

  2. 把生成的uImage传到开发板上面

image-20241221160736473

搞一个应用程序,测试这个LED点灯程序,Linux下一切皆文件,那么访问应用层访问底层的入口就是/dev/led文件image-20241221161011705

  1. 在开发板上生成这个设备号文件

image-20241221161329106

  1. 通过交叉编译,把应用程序发到板子上面运行监测即可

方法二:编译kconfig

由方法一可知,添加一个驱动还行,如果有n个呢?就很难维护。所以有了此方法

二、make menuconfig、Makefile、Kconfig、.config 
	三者的关系
	Makfile 具体编译文件
	Kconfig 选配,生成图形化界面,这个只是配置make menuconfig后的界面,具体编译模块还是看makefile
	在Kconfig中添加一个灯的选项
	界面修改好了, 还需要再次修改 Makfile
	[] 只有两种选项编译(y)或者不编译(n)  <> 三种选项 编译(y)、不编译(n)或者编译成模块(m)
	obj-y obj-n obj-$(CONFIG_XXX)	//编译,不编译,根据kconfig确定
	方便驱动管理

如何关联起来kconfig和makefile。(之前直接写的-y就写死了)

image-20241221165323969

方法三:编译成模块

之前编译的都是跟内核原本的驱动目录都在一块呢,如果我们写了很多驱动的话还是很乱,这个部分就是把自己写的驱动与Linux原本驱动分离开来。

这部分的内容放到Linux驱动里面讲,在这里不再详细展示。

换成tristate就可有三种模式选择,可编译不可编译,编译编译成模块

image-20241221172322382

2.字符设备框架

image-20241222105753981

http://www.dtcms.com/a/109903.html

相关文章:

  • MySQL:数据类型
  • 380_C++_[结合379]从连续内存地址中取出来的热力图图片data,转换为可视化的、带颜色的热力图像显示到界面(图像格式为RGBA)
  • Yapi部署指南:在 Linux 上 Yapi 教程
  • Linux Bash 脚本实战:自动监控域名证书过期并发送邮件告警
  • vue和angular实现飞机大战
  • 彩虹表攻击
  • 52.个人健康管理系统小程序(基于springbootvue)
  • Linux 高级命令与常见操作:文本处理、系统管理与网络调试
  • 红米AC2100-刷OpenWrt系统,安装zerotier教程
  • 7-6 混合类型数据格式化输入
  • 大数据(4)Hive数仓三大核心特性解剖:面向主题性、集成性、非易失性如何重塑企业数据价值?
  • PPT助手:一款集计时、远程控制与多屏切换于一身的PPT辅助工具
  • 【备忘】在Docker中安装宝塔面板,实现环境隔离,又能快速迁移服务器环境
  • 基于Flask的MBA考生成绩查询系统设计与实现
  • Java 可变参数(Varargs)使用指南
  • Vue实例中,setTimeout()不生效怎么解决
  • 联合类型|类型断言|交叉类型
  • [CISSP] [6] 密码学和对称密钥算法
  • AI模拟了一场5亿年的进化
  • 微信小程序基于Canvas实现头像图片裁剪(上)
  • 【python】Plot a Square
  • 【SQL】取消sql某一列的唯一值key值的方法
  • XXX软件系统研发技术手册模板
  • “*(单星号)”和“**(双星号)”在Python中的灵活运用
  • PySide6控件:QFont设置、QColor调色板、QPixmap图像处理与QCursor光标自定义
  • ESP32 C3mini与ESP32-WROOM蓝牙连接问题
  • 离线模型添加联网搜索功能
  • hpu萌新训练赛(三)
  • NVR接入录像回放平台EasyCVR打造基层安防 “智慧中枢”:一站式智慧安防方案
  • 使用 Mockito 快速构建 Mock 测试环境