lv12 linux设备树、网卡驱动移植

news2025/1/24 17:31:18

目录

1 设备树

1.1概念 

1.2 设备树文件

1.3 设备树语法

2 Linux内核驱动移植

2.1 步骤

3 实验八网卡驱动移植

3.1 在内核源码的顶层目录下执行如下命令,修改内核配置

3.2 在设备树中添加网卡的硬件信息

3.3 修改时钟相关配置(忽略无用的时钟)

3.4 修改 EMMC 相关配置

3.5  编译内核和设备树

3.6  测试内核和设备树

4 练习


1 设备树

1.1概念 

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

驱动负责逻辑、设备树负责操作寄存器,把两者分开管理移植到其他芯片的时候驱动逻辑不需要变更,只需要修改设备树即可,同时可以使得内核源码大小精简

1.2 设备树文件

dts  设备树源文件    

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

dtb  编译后的设备树文件

1.3 设备树语法

设备树的语法为树状结构,由一系列的节点和属性组成,根节点下包含子节点     子节点下还可以包含子节点,节点内部包含了对应设备的属性

2 Linux内核驱动移植

2.1 步骤

  • 1.在make menuconfig界面中选中要安装的驱动     
  • 2.在设备树中添加/修改相应的设备信息     
  • 3.重新编译内核/设备树

实验八网卡驱动移植

【实验目的】
掌握 Linux 内核配置的基本方法,完成对网卡驱动、 NFS 等相关功能的配置。
注:在开发板上电uboot启动时,可以通过tftp下载,此时时uboot支持网卡驱动,当kernel启动时卡住时内核还不支持
【实验环境】
ubuntu 14.04 发行版
FS4412 实验平台
交叉编译工具: arm-none-linux-gnueabi-
【注意事项】
实验步骤中以“ $ ”开头的命令表示在 ubuntu 环境下执行,以“ # ”开头的命令表
示在开发板下执行
【实验步骤】

3.1 在内核源码的顶层目录下执行如下命令,修改内核配置

$ make menuconfig

给内核选配 DM9000 网卡驱动,然后选择“Save”保存

Device Drivers --->
    [*] Network device support --->
        [*] Ethernet driver support --->
            <*> DM9000 support

因为内核要使用 NFS 去挂载根文件系统,而 NFS 是基于 TCP 协议实现的,所以这里需

要选配 TCP 相关的网络协议(部分功能默认已经选配),然后选择“ Save ”保存
[*] Networking support --->
    Networking options --->
        <*> Packet socket
        <*> Unix domain sockets
        [*] TCP/IP networking
        [*] IP: kernel level autoconfiguration

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

File systems --->
    [*] Network File Systems --->
        <*> NFS client support
        <*> NFS client support for NFS version 3 (NEW)
        [*] NFS client support for the NFSv3 ACL protocol extension
        [*] Root file system on NFS

设置完成后通过方向键选择‘Save’保存即可,然后选择‘Exit’退出该配置界面

3.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];
    };
};

3.3 修改时钟相关配置(忽略无用的时钟)

$ vi drivers/clk/clk.c

static bool clk_ignore_unused;

修改为以下内容,然后保存退出

static bool clk_ignore_unused=true;

3.4 修改 EMMC 相关配置

$ vi drivers/mmc/core/mmc.c

if (card->ext_csd.rev > 7) {
    pr_err("%s: unrecognised EXT_CSD revision %d\n",
        mmc_hostname(card->host), card->ext_csd.rev);
    err = -EINVAL;
    goto out;
}

修改为以下内容,然后保存退出

#if 0
if (card->ext_csd.rev > 7) {
#else
if (card->ext_csd.rev > 8) {
#endif
    pr_err("%s: unrecognised EXT_CSD revision %d\n",
        mmc_hostname(card->host), card->ext_csd.rev);
    err = -EINVAL;
    goto out;
}

3.5  编译内核和设备树

$ make uImage
$ make dtbs

3.6  测试内核和设备树

将编译生成的内核和设备树拷贝到 tftp 的工作目录
$ sudo cp arch/arm/boot/uImage /tftpboot
$ sudo cp arch/arm/boot/dts/exynos4412-fs4412.dtb /tftpboot/
$ sudo chmod 777 /tftpboot/*

tftp nfs 服务器

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

重启开发板查看现象,如图所示,此时 Linux 内核已经能通过 NFS 去挂载根文件系统

在终端下执行‘ ls ’命令我们就能看到根文件系统中的内容

4 练习

1.简述设备树的作用以及使用设备树的优势是什么?
2.简述在Linux内核上移植一个驱动程序(内核源码支持)需要做哪些事? 

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

2
  1.在make menuconfig界面中选中要安装的驱动     
  2.在设备树中添加/修改相应的设备信息     
  3.重新编译内核/设备树

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

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

相关文章

opencv入门到精通——改变颜色空间

目录 目标 改变颜色空间 对象追踪 如何找到要追踪的HSV值&#xff1f; 目标 在本教程中&#xff0c;你将学习如何将图像从一个色彩空间转换到另一个&#xff0c;像BGR↔灰色&#xff0c;BGR↔HSV等 除此之外&#xff0c;我们还将创建一个应用程序&#xff0c;以提取视频中的…

《深入理解计算机系统》学习笔记 - 第七课 - 机器级别的程序三

Lecture 07 Machine Level Programming III Procedures 机器级别的程序三 文章目录 Lecture 07 Machine Level Programming III Procedures 机器级别的程序三概述程序机制 栈结构栈说明栈定义推入数据弹出数据 调用控制代码示例程序控制流程%rip 传递数据ABI 标准示例 管理局部…

YB75XXH系列是采用CMOS工艺制造,低功耗的高压稳压器

YB75xxH 高耐压线性稳压器 ■产品简介&#xff1a; YB75XXH系列是采用CMOS工艺制造&#xff0c;低功耗的高压稳压器&#xff0c;最高输入电压可达25V,输出电压范围为1.5V一12.0V。它具有高精度的输出电压、极低的供电电流、极低的跌落电压等特点。 ■产品特点&#xff1a; …

使用Guava轻松创建和管理不可变集合

第1章&#xff1a;引言 大家好&#xff0c;我是小黑。今天&#xff0c;我们来聊聊一个在Java编程里超有用的话题&#xff1a;使用Guava创建和管理不可变集合。首先&#xff0c;咱们得明白&#xff0c;什么是不可变集合。简单来说&#xff0c;不可变集合就是一旦创建就不能被修…

深入了解 Android 中的应用程序签名

深入了解 Android 中的应用程序签名 一、应用程序签名介绍1.1 应用程序签名1.2 应用程序签名的意义1.3 应用程序签名的流程1.4 应用程序签名的方案1.5 签名的重要性和应用场景 二、AOSP 的应用签名2.1 AOSP的应用签名文件路径2.2 应用程序指定签名文件 三、Android Studio 的应…

【SpringBoot篇】基于Redis实现生成全局唯一ID的方法

文章目录 &#x1f354;生成全局唯一ID&#x1f339;为什么要生成全局唯一id&#x1f33a;生成全局id的方法✨代码实现 &#x1f354;生成全局唯一ID 是一种在分布式系统下用来生成全局唯一id的工具 在项目中生成全局唯一ID有很多好处&#xff0c;其中包括&#xff1a; 数据…

在Next.js和React中搭建Cesium项目

在Next.js和React中搭建Cesium项目&#xff0c;需要确保Cesium能够与服务端渲染(SSR)兼容&#xff0c;因为Next.js默认是SSR的。Cesium是一个基于WebGL的地理信息可视化库&#xff0c;通常用于在网页中展示三维地球或地图。下面是一个基本的步骤&#xff0c;用于在Next.js项目中…

信号与线性系统翻转课堂笔记8——周期信号的频谱

信号与线性系统翻转课堂笔记8——周期性信号的频谱 The Flipped Classroom8 of Signals and Linear Systems 对应教材&#xff1a;《信号与线性系统分析&#xff08;第五版&#xff09;》高等教育出版社&#xff0c;吴大正著 一、要点 &#xff08;1&#xff0c;重点&#…

【github】github设置项目为私有

点击setting change to private 无脑下一步

【Proteus/8086】swjtu西南交大微机与接口技术实验:计时器

实验内容: 计时器基本功能: 1)CPU必须用8086 2)计时器最小计时单位为秒。 3)以00:00格式显示计时,前2位表示分钟,后2位表示秒。 4)计时器是正计时方式 5)有暂停、继续计时功能 6&#xff09;有复位计时功能 7&#xff09;每次按下暂停键&#xff0c;能显示计时间隔时间 参考…

uniapp中使用封装步骤条组件

针对步骤条封装完终于清清楚楚啦 先看效果&#xff1a; 附上代码&#xff1a;使用可直接复用&#xff1a;数据是写在了当前组件中&#xff0c;如有必须&#xff0c;可以使用其中的props传值stepInfos传递相应的数据&#xff0c;根据steps步数就可以控制走到哪一步啦 <temp…

双向数据绑定是什么

一、什么是双向绑定 我们先从单向绑定切入单向绑定非常简单&#xff0c;就是把Model绑定到View&#xff0c;当我们用JavaScript代码更新Model时&#xff0c;View就会自动更新双向绑定就很容易联想到了&#xff0c;在单向绑定的基础上&#xff0c;用户更新了View&#xff0c;Mo…

在 Windows 中关闭指定端口的方法

方法一&#xff1a;使用命令行&#xff08;Command Prompt&#xff09; 查找端口占用情况 打开命令提示符&#xff08;Command Prompt&#xff09;并输入以下命令来查找占用指定端口的进程&#xff1a; netstat -aon|findstr "<port_number>" 这里的 <p…

【笔记】Spring的循环依赖

Spring的循环依赖 ObjectFactory:函数式接口&#xff0c;可以将lambda表达式作为参数放在方法的实参种&#xff0c;在方法执行的时候&#xff0c;并不会实际的调用当前lambda表达式&#xff0c;只有在调用getObject方法的时候才回去调用lambda表达式 为什么spring要用三级缓存…

一周工作问题总结(2023.12.18-2023.12.22)

一周工作问题总结 1. 接口调用频率2. 汉字在数据库中占用字节问题3. Map在循环中修改自己的key与value4. Group BY5.递归同步数据6.代码移动Idea飘红 1. 接口调用频率 供应商给的接口可以每秒调用5-10次&#xff0c;那么我为了保险每秒调用5次&#xff0c;为了防止过度调用接口…

SpringBoot+SSM项目实战 苍穹外卖(7)(Spring Cache)

继续上一节的内容&#xff0c;本节实现缓存菜品、缓存套餐、添加购物车、查看购物车和清空购物车功能。 目录 缓存菜品缓存套餐(基于Spring Cache)EnableCaching、Cacheable、CachePut和CacheEvictSpring Cache实现缓存套餐 添加购物车查看购物车清空购物车 缓存菜品 用户端小…

nodejs+vue+ElementUi医院预约挂号系统3e3g0

本医院预约挂号系统有管理员&#xff0c;医生和用户。该系统将采用B/S结构模式&#xff0c;使用Vue和ElementUI框架搭建前端页面&#xff0c;后端使用Nodejs来搭建服务器&#xff0c;并使用MySQL&#xff0c;通过axios完成前后端的交互 管理员功能有个人中心&#xff0c;用户管…

使用 Elasticsearch 检测抄袭 (一)

作者&#xff1a;Priscilla Parodi 抄袭可以是直接的&#xff0c;涉及复制部分或全部内容&#xff0c;也可以是释义的&#xff0c;即通过更改一些单词或短语来重新表述作者的作品。 灵感和释义之间是有区别的。 即使你得出类似的结论&#xff0c;也可以阅读内容&#xff0c;获得…

java练习题之多态练习

1&#xff1a;关于多态描述错误的是(D) A. 父类型的引用指向不同的子类对象 B. 用引用调用方法&#xff0c;只能调用引用中声明的方法 C. 如果子类覆盖了父类中方法&#xff0c;则调用子类覆盖后的方法 D. 子类对象类型会随着引用类型的改变而改变 2&#xff1a;class Supe…

【ONE·MySQL || 基础介绍】

总言 主要内容&#xff1a;MySQL在Centos 7下的安装&#xff08;主要学习相关指令语句&#xff0c;理解安装操作是在做什么&#xff09;、对MySQL数据库有一个基础认识。 文章目录 总言0、MySQL的安装与卸载&#xff08;Centos 7&#xff09;0.1、MySQL的卸载0.1.1、卸载不必要…