Linux设备驱动移植

news2024/9/20 6:24:59

目录

一、设备树

1.1设备树

1.2设备树文件

1.3设备树语法

1.4Linux内核驱动移植

二、网卡驱动

2.1在make menuconfig界面中选中要安装的驱动

2.2在设备树中添加/修改相应的设备信息

2.3修改时钟 

2.4修改eMMc

2.5编译测试


一、设备树

1.1设备树

    设备树是一种描述硬件信息的数据结构,Linux内核运行时可以通过设备树将硬件信息直接传递给Linux内核,而不再需要在Linux内核中包含大量的冗余编码

        操作一个硬件需要逻辑和硬件信息两种代码。Linux将这两种代码分离了,逻辑代码就是驱动,只是实现一个过程,不包含硬件信息。而这些硬件相关的代码就是设备树。

        老师举了一个例子。LED闪烁。闪烁的过程就是驱动代码。设备树就是告诉驱动让谁闪烁的。

        这样做的好处就是平台升级后驱动代码不用动改一下设备树就行。早期的Linux不是这种机制。是一个叫平台文件的机制。类似于uboot的board(uboot是学的Linux;不过我先学的uboot习惯这样说。)这种机制导致Linux的源码体积越来越大。最后Linux之父忍不住了将Linux社区维护的大佬用一个F开头的单词给骂了。说这些board文件都是垃圾(因为大部分都用不上。我们真正使用的就那点。一堆重复制造的轮子)。这些大佬也都是有头有脸的人物。所以后面ARM-Linux就引入的设备树机制。

1.2设备树文件

    dts  设备树源文件

    dtsi 类似于头文件,包含一些公共的信息,可被其它设备树文件引用

    dtb  编译后的设备树文件

1.3设备树语法

    设备树的语法为树状结构,由一系列的节点和属性组成,根节点下包含子节点

    子节点下还可以包含子节点,节点内部包含了对应设备的属性

/{
	memory{
		0x40000000 0x40000000
	};
	dm9000{
		0x05000000;
	};	
	key{
		up{

		};
		down{
	
		};
	};
};

 设备树的语法很简单一个/就表示根节点每个子节点中有一些属性比如内存memory内又位置和大小。网卡dm9000里有网卡的位置。

键盘key内有具体哪个按键。

 

1.4Linux内核驱动移植

  1.在make menuconfig界面中选中要安装的驱动

  2.在设备树中添加/修改相应的设备信息

  3.重新编译内核/设备树

二、网卡驱动

2.1在make menuconfig界面中选中要安装的驱动

 选择光标下面那个Device Drivers

 

 

因为内核要使用 NFS 去挂载根文件系统, 而 NFS 是基于 TCP 协议实现的, 所以这里需
要选配 TCP 相关的网络协议(部分功能默认已经选配) , 然后选择“Save” 保存
 

 

 

这四个一定要选

因为内核要使用 NFS 去挂载根文件系统, 所以需要给内核选配 NFS 客户端及相关功能
 

 

 

2.2在设备树中添加/修改相应的设备信息

vi arch/arm/boot/dts/exynos4412-fs4412.dts

 

添加到最后 

 srom-cs1@5000000 {
compatible = "simple-bus";
#address-cells = <1>;
#size-cells = <1>;
reg = <0x5000000 0x1000000>;
ranges;
ethernet@5000000 {
compatible = "davicom,dm9000";
reg = <0x5000000 0x2 0x5000004 0x2>;
interrupt-parent = <&gpx0>;
interrupts = <6 4>;
davicom,no-eeprom;
mac-address = [00 0a 2d a6 55 a2];
};
};

2.3修改时钟 

vi drivers/clk/clk.c 

 

把这个变量给个初值true(忽略无用的时钟)

2.4修改eMMc

 vi drivers/mmc/core/mmc.c

 

其实就是把7改成了8

2.5编译测试

make uImage

make dtbs

 

sudo service tftpd-hpa restart
sudo service nfs-kernel-server restart

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/342371.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MATLAB 粒子群算法

✅作者简介&#xff1a;人工智能专业本科在读&#xff0c;喜欢计算机与编程&#xff0c;写博客记录自己的学习历程。 &#x1f34e;个人主页&#xff1a;小嗷犬的个人主页 &#x1f34a;个人网站&#xff1a;小嗷犬的技术小站 &#x1f96d;个人信条&#xff1a;为天地立心&…

Cy5 Alkyne,1223357-57-0,花青素Cyanine5炔基,氰基5炔烃

CAS号&#xff1a;1223357-57-0 | 英文名&#xff1a; Cyanine5 alkyne&#xff0c;Cy5 Alkyne | 中文名&#xff1a;花青素CY5炔基CASNumber&#xff1a;1223357-57-0Molecular formula&#xff1a;C35H42ClN3OMolecular weight&#xff1a;556.19Purity&#xff1a;95%Appear…

全网详解MyBatis-Plus updateById方法更新不了空字符串或null的解决方法

文章目录1. 文章引言2. 分析问题3. 解决问题3.1 方法1&#xff1a;全局配置方式3.2 方法2&#xff1a;非null字段验证策略3.3 方法3&#xff1a;通过注解的方式4. 总结1. 文章引言 在开发的过程中&#xff0c;我们经常使用MyBatis-Plus的updateById方法更新数据表&#xff0c;…

ChatGPT学习心得一(使用node+react做了一个案例)

项目地址 http://chat.xutongbao.top 项目截图 使用技术栈 nodeSQLiteredisnginxlog4jsexpressjenkinscdnreactantdreact-scrollbars-customiconfontwebpackpostmanaxiosreduximmutablenpmyarnopenai等等 官网 https://openai.com/blog/chatgpt/ 官方聊天应用 https://ch…

【Linux】多线程编程 - 同步/条件变量/信号量

目录 一.线程同步 1.什么是线程同步 2.为什么需要线程同步 3.如何实现线程同步 二.条件变量 1.常见接口以及使用 2.wiat/signal中的第二个参数mutex的意义 3.代码验证 三.POSIX信号量 1.概念 2.常见接口以及使用 四.条件变量vsPOSIX信号量 一.线程同步 1.什么是线…

公链“私”用

发表时间&#xff1a;2022年3月17日 信息来源&#xff1a;bsvblockchain.org 虽然区块链行业已经诞生了十多年&#xff0c;但直到最近几年这个行业才开始走向专业化并日趋成熟&#xff0c;现在它已成为了一种可为企业实用范例提供合法解决方案的技术。 早年间&#xff0c;与这…

基于ubuntu20.4的wine的MDK5软件的安装

本文基于ubuntu20.4安装MDK5的keil软件&#xff0c;由于MDK不提供linux版本的安装软件&#xff0c;因此需要利用wine软件来安装MDK5软件&#xff0c;具体流程包括wine软件安装、MDK5安装及MDK5的lic添加等3部分内容。具体流程如下所示&#xff1a; &#xff08;一&#xff09;…

typescript 路径别名问题(别名设置 开发与打包时路径问题)

在使用TS开发时&#xff0c;一般我们会在tsconfig 中设置别名来让代码变得优雅一点。 将 import xx from …/…/…/service/改为import xx form ‘service/’ tsconfig 别名设置 此时项目结构如下 一般我们可以通过baseUrl 和path两个字段来设置对应的别名 {"include…

爬虫:栖落的电影网站,利用requests和re模块

这是栖落的电影网站地址&#xff1a;https://xxx.xxx 进入网页&#xff0c;显示&#xff1a; 爬取目标&#xff1a;电影的名称、观影人数和评分。 易知本网站的url url "https://xxx.xxx" 本网站会识别出headers中的python请求而拒绝访问&#xff0c;所以需要更改…

企业管理者不得不看!现在的大企业都是怎么做文档管理的?

最近有一位朋友问我&#xff1a;“如果是大型企业&#xff0c;文档该怎么管理&#xff1f;” 说实话&#xff0c;很多内部的CIO、CTO对这个问题都是束手无策。信息文件散乱、难以和内部的组织构架关联起来、查找困难、不同版本更新进度不一&#xff0c;确实存在一些管理上的难题…

【DSP视频教程】第11期:插补算法,曲线拟合丝滑顺畅,统计函数和基础函数加速实现,汇集SIMD,饱和和MAC乘累加应用实战(2023-02-12)

视频教程汇总帖&#xff1a;https://www.armbbs.cn/forum.php?modviewthread&tid110519 DSP视频教程有段时间没有更新了。 当前DSP库从CMSIS软件包里面独立出来&#xff0c;并且更新非常频繁&#xff0c;所以本期视频教程优先给大家简单介绍下新版DSP&#xff0c; 然后为…

物流运输管理系统源码:实现物流公司全链条管理

一套适用于物流公司的物流运输管理系统&#xff0c;涵盖物流公司内部从订单->提货->运单->配车->点到->预约->签收->回单->代收货款的全链条管理系统。 运行环境&#xff1a;Windows.NET4.0SQLSERVER2008R2 私信了解更多&#xff01; 菜单功能&#…

灰色关联分析法详解及python实践

1. 关于灰色关联分析 1.1. 什么是灰色关联分析 灰色关联分析是指对一个系统发展变化态势的定量描述和比较的方法&#xff0c;其基本思想是通过确定参考数据列和若干个比较数据列的几何形状相似程度来判断其联系是否紧密&#xff0c;它反映了曲线间的关联程度。 在系统发展过…

亚马逊云科技携手滴普科技,打造数据智能新标杆

随着企业数字化转型的不断深入&#xff0c;数据对于业务的价值和重要性也逐渐凸显。越来越多企业意识到&#xff0c;只有不断提升底层数据基础平台的性能和能力&#xff0c;才能构建数据驱动的业务&#xff0c;增强企业核心竞争力。作为湖仓一体数据智能基础软件独角兽企业&…

python基础之变量

Python 中的变量不需要声明。每个变量在使用前都必须赋值&#xff0c;变量赋值以后该变量才会被创建。 在 Python 中&#xff0c;变量就是变量&#xff0c;它没有类型&#xff0c;我们所说的"类型"是变量所指的内存中对象的类型。 1&#xff1a;什么是变量 变量指的…

纽扣电池上架亚马逊UL4200A检测项目流程

纽扣电池&#xff08;button cell &#xff09;也称扣式电池&#xff0c;是指外形尺寸象一颗小纽扣的电池&#xff0c;一般来说直径较大&#xff0c;厚度较薄。纽扣电池因体形较小&#xff0c;故在各种微型电子产品中得到了广泛的应用&#xff0c;直径从4.8mm至30mm&#xff0c…

腾讯云轻量应用服务器和云服务器CVM区别

腾讯云轻量级服务器和云服务器有什么区别&#xff1f;轻量级应用服务器和云服务器CVM哪个更好&#xff1f;无论成本和使用门槛如何&#xff0c;云服务器CVM都更好&#xff1b;从性价比和易用性的角度来看&#xff0c;轻量级应用服务器的成本更低。来详细谈谈腾讯云轻量级应用服…

LabVIEW项目或库文件已损坏

LabVIEW项目或库文件已损坏尝试打开项目文件&#xff08;*.lvproj&#xff09;时&#xff0c;不断收到错误&#xff1a;项目或库文件已损坏。当尝试在新计算机上打开类库时&#xff0c;看到错误内存或数据结构损坏。无法加载文件&#xff0c;但库在另一台计算机上打开正常。如何…

如何学习PMP?

★基础要打牢 方法&#xff1a;“基础不牢&#xff0c;地动山摇”&#xff0c;如果基础不牢那么就很难拿高分&#xff0c;因为连最基础的题目分都不一定能拿到。 可以在针对基础知识&#xff0c;把PMBOK看一两遍&#xff0c;再次加深印象&#xff0c;再把平时做章节练习、每日5…

Java导出自定义Excel表格,一套组合拳解决

&#x1f535; (一) 功能现状 &#x1f36d;目前大部分SpringBoot框架中自带了Excel导出功能&#xff0c;但其中并不支持自定义导出效果的可能性很大。比如很多框架中都能直接支持自动生成关于单表的增删改查操作的前后端代码&#xff0c;但是复杂的多表操作就无法做到&#xf…