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

目录

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) {
#endifpr_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内核中包含大量的冗余编码21.在make menuconfig界面中选中要安装的驱动     2.在设备树中添加/修改相应的设备信息     3.重新编译内核/设备树

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

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

相关文章

【代码随想录】刷题笔记Day37

前言 试一试早上晚上固定时间刷题会不会效率and养成习惯 135. 分发糖果 - 力扣&#xff08;LeetCode&#xff09; 两边一起判断容易顾此失彼从左到右遍历&#xff0c;只比较右比左大的情况&#xff0c;局部and全局&#xff1a;右比左大从右到左遍历&#xff0c;只比较左比右…

<ctype.h> 头文件:C 语言字符处理函数详解

文章目录 引言函数isalpha():isdigit():isalnum():isspace():ispunct():islower():isupper():tolower():toupper(): 引言 在 C 语言中&#xff0c;<ctype.h> 头文件提供了一系列用于字符处理的函数&#xff0c;这些函数对于处理和验证用户输入、进行文本处理以及字符转换…

运维大模型探索之 Text2PromQL 问答机器人

作者&#xff1a;陈昆仪&#xff08;图杨&#xff09; 大家下午好&#xff0c;我是来自阿里云可观测团队的算法工程师陈昆仪。今天分享的主题是“和我交谈并获得您想要的PromQL”。今天我跟大家分享在将AIGC技术运用到可观测领域的探索。 今天分享主要包括5个部分&#xff1a;…

mysql 5.7.34二进制安装报错:VCRUNTIME140_1.DLL

1 Windows 2012R安装MySQL5.7.34二进制版本 执行命令&#xff0c;出现如下提示 mysqld --defaults-fileD:\mysql-5.7.43-winx64\my.ini --initialize 处理方法&#xff1a;下载文件&#xff0c;并替换到C:\windows\system32目录下即可 https://cn.dll-files.com/vcruntime140…

[pyqt5]QSpinBox相关函数

1.QSpinBox简介 QSpinBox是计数器控件&#xff0c;允许用户输入整数&#xff0c;或者通过上下按键递增或者递减&#xff0c;默认调整范围是0-99&#xff0c;每次变化步数1&#xff0c;用户可以自行修改范围和步数&#xff1b; QSpinBox常用方法如下&#xff1a; QSpinBox信号…

iPad绘画之旅:从小白到文创手账设计的萌系简笔画探索

&#x1f482; 个人网站:【 海拥】【神级代码资源网站】【办公神器】&#x1f91f; 基于Web端打造的&#xff1a;&#x1f449;轻量化工具创作平台&#x1f485; 想寻找共同学习交流的小伙伴&#xff0c;请点击【全栈技术交流群】 iPad的出现&#xff0c;不仅改变了我们对电子设…

7. Resource database in UVM(UVM的资源数据库)

UVM集中资源数据库用于存储可配置&#xff08;configurable&#xff09;对象/object、变量/variables、虚拟接口/virtual interfaces、队列/queues、类句柄/class handles等&#xff0c;并从数据库中检索它们。这种可配置的测试平台为验证工程师提供了一定程度的自由度&#xf…

变换编码基本原理:理解视频编码中的关键技术

在视频编码中&#xff0c;变换编码是一项重要的基本原理&#xff0c;其通过对视频信号进行变换和压缩&#xff0c;实现了高效的视频数据编码和传输。本文将介绍变换编码的基本原理、应用及其在视频编码中的重要作用。 1. 变换编码的基本原理 1.1 变换编码概述 变换编码是一种…

设计模式-单例模式(结合JVM基础知识)

1.定义介绍 所谓单例模式&#xff0c;是指在程序运行时&#xff0c;整个JVM中只有一个该类的实例对象 2. 单例模式的优点 复用性高&#xff0c;节省内存资源。类的加载、连接、初始化、使用都要占用虚拟机内存空间&#xff0c;因此&#xff0c;频繁创建对象会造成资源浪费&a…

【教程】从gitee或者github,下载单个文件或文件夹命令

1.打开git 2.初始化 git init 3.设置允许下载子目录 &#xff08;不需要修改任何&#xff0c;只要原样复制&#xff0c;需要按照个人状况修改的话我会标注&#xff09; git config core.sparseCheckout true 4. 选择要下载的单个文件夹的路径 这里单引号内部需要修改&…

StarRocks-3.1.6升级

1、升级路径 1.1、小版本升级 您可以跨小版本升级您的 StarRocks 集群&#xff0c;例如&#xff0c;从 v2.2.6 直接升级到 v2.2.11。 1.2、大版本升级 从 StarRocks v2.0 开始&#xff0c;您可以跨大版本升级 StarRocks 集群&#xff0c;例如&#xff0c;从 v2.2.x 直接升级…

使用事件机制的好处例子说明

不使用事件机制 class Button {public void OnClick(){// 调用文本框的方法显示消息TextBox.ShowMessage("按钮被点击了&#xff01;");} }class TextBox {public static void ShowMessage(string message){Console.WriteLine(message);} }如果你想要在按钮被点击时执…

AR眼镜定制_AR智能硬件方案|显示方案|光学方案

AR眼镜的硬件方案定制是根据客户需求和功能来设计的。从芯片平台选型、主板尺寸大小、内存、电池容量&#xff0c;到实现各项功能的传感器、显示光机模组、摄像头、接口、按键、充电等&#xff0c;再到整机的结构、散热设计&#xff0c;以及双目AR眼镜、单目智能眼镜、全息头盔…

【集合】Vector与CopyOnWriteArrayList

前言&#xff1a; 此篇博客着重于&#xff1a;在多线程并发执行读、写操作的场景下&#xff0c;Vector集合、CopyOnWriteArrayList集合是否能保证线程安全&#xff1f;它们是通过什么方式保证线程安全的&#xff1f; Vector&#xff1a; &#xff08;1&#xff09;add(E e)方法…

Linux系统下修改环境变量及生效方法

1.修改环境变量 &#xff08;1&#xff09;打开终端&#xff0c;输入以下命令后回车&#xff1a; vim ~/.cshrc &#xff08;2&#xff09;将所需的环境变量添加进去&#xff0c;按“Esc”退出&#xff0c;再按shiftZZ&#xff0c;使其保存 2.执行source ~/.cshrc使其生效即…

Text to image论文精读 TISE (Text-to-Image Synthesis Evaluation):用于文本到图像合成的评估度量工具包

TISE (Text-to-Image Synthesis Evaluation)是一款用于评估文本生成图像的Python评估工具箱。文章由Tan M. Dinh, Rang Nguyen, and Binh-Son Hua等人发表。 其以统一的方式促进、倡导公平的评估度量&#xff0c;并为未来的文本到图像综合研究提供可重复的结果。 文章链接&am…

centos7.9中离线安装nginx开启ssl,arm架构

一、首先需要去国内相关镜像库下载相关依赖rpm&#xff1a; http://mirrors.bfsu.edu.cn/centos-altarch/7.9.2009/os/aarch64/ http://mirror.nju.edu.cn/centos-altarch/7.9.2009/os/aarch64/ http://mirrors.tuna.tsinghua.edu.cn/centos-altarch/7.9.2009/os/aarch64/ htt…

电子企业数字工厂管理系统有哪些实施难点

随着科技的快速发展&#xff0c;数字化转型已经成为企业提升竞争力、优化生产流程的必经之路。在电子企业中&#xff0c;数字工厂管理系统的实施尤为关键&#xff0c;它能够助力企业实现高效、精准的生产管理。然而&#xff0c;在实际操作过程中&#xff0c;实施数字工厂管理系…

linux ARM64 异常

linux 的系统调用是通过指令陷入不同异常级别实现的。arm64 架构的 cpu 的异常级别结构如下&#xff1a; 在上图中&#xff0c;用户层运行在 EL0 也就是异常级别 0&#xff0c;Linux 内核运行在 EL1 也就是异常级别 1&#xff0c;安全可信操 作系统运行在异常级别 2&#xff1a…

(四) ClickHouse 中使用 `MaterializedMySQL` 引擎单独同步 MySQL 数据库中的特定表(例如 `aaa` 和 `bbb`)

要在 ClickHouse 中使用 MaterializedMySQL 引擎单独同步 MySQL 数据库中的特定表&#xff08;例如 aaa 和 bbb&#xff09;&#xff0c;您可以使用 TABLE OVERRIDE 功能。这个功能允许您指定要同步的特定表&#xff0c;同时忽略其他表。以下是步骤说明&#xff1a; 1. 启用 M…