2. 驱动开发--驱动开发环境搭建
文章目录
- 前言
- 一、Linux中配置编译环境
- 1.1 linux下安装软件的方法
- 1.2 交叉编译工具链的安装
- 1.2.1 测试是否安装成功
- 1.3 设置环境变量
- 1.3.1 将工具链导出到环境变量
- 1.4 为工具链创建arm-linux-xxx符号链接
- 二、 搭建运行开发环境
- 2.1 tftp网络方式加载内核和设备树文件
- 2.2 nfs网络方式加载rootfs
- 参考资料
前言
搭建驱动开发的环境,便于调试。文章记录了本人的项目实践和朱有鹏老师的课程知识汇总。
一、Linux中配置编译环境
1.1 linux下安装软件的方法
(1)在线安装。譬如ubuntu中使用apt-get install vim来安装vim软件。
(2)自己下载安装包来安装。缺陷: 不知道下载的安装包和系统是否匹配。
(3)源代码安装。
总结:安装交叉编译工具链(arm-linux-gcc)实际采用第二种安装方式。
1.2 交叉编译工具链的安装
打开虚拟机,在/usr/local/下创建/usr/local/arm文件夹
先将安装包从Windows中弄到linux中去。可以用共享文件夹,也可以用Samba,也可以用cuteftp。
解压:tar -jxvf arm-2009q3.tar.bz2
应用程序在解压出来的文件中,安装在/usr/local/arm/arm-2009q3/bin目录下。
注:linux中的目录管理方法。技术角度来讲,linux中所有目录性质都是一样的,所以技术角度来讲我们把软件安装到哪里都行。但是如果胡乱放置,将来程序可能不好找。所以久而久之就总结了一个文件放置的一般定义,譬如说,/bin目录放置一些系统自带的用户使用的应用程序,/sbin目录下存放的是系统自带的系统管理方面的应用程序。
那我们装软件放在哪里?
一般都在/usr目录下。我们安装arm-linux-gcc,就在/usr/local/底下创建一个arm文件夹,然后装到里面。
1.2.1 测试是否安装成功
切换到真正的应用程序的安装目录下(即/usr/local/arm/arm-2009q3/bin), 去执行arm-linux-gcc -v
执行方法:./arm-none-linux-gnueabi-gcc -v
执行后可以得到一长串输出,其中有**“gcc version 4.4.1”**字样,即表示安装成功。
arm-none-linux-gnueabi-gcc No such file or directory这个错误的分析思路:正常来说只有某个被编译的文件不存在才会报这个错误,但如果确少某个必要的包,也会出现这个问题,而且根本不知道从哪里查问题。
真正原因: 这个gcc可执行文件是32位的版本,而在64位系统上需要安装32位兼容包才可以运行正常。
解决办法:
安装ia32-libs (sudo apt-get install lib32z1
)
但是此时只能在应用程序目录下执行应用程序或者在别处执行时需要写入完整的应用程序路径/usr/local/arm/arm-2009q3/bin/arm-none-linux-gnueabi-gcc-v比较繁琐,所以下面引入环境变量。
1.3 设置环境变量
环境变量就是操作系统的全局变量。每一个环境变量对操作系统来说都是唯一的,名字和所代表的意义都是唯一的。linux系统可以有很多个环境变量。其中有一部分是linux系统自带的,还有一些是我们自己来扩充的。我们这里涉及到的一个环境变量是PATH。PATH这个环境变量是系统自带的,它的含义就是系统在查找可执行程序时会搜索的路径范围。(此时在任意路径直接执行arm-none-linux-gnueabi-gcc -v都可以了)
输出linux系统环境变量: echo $PATH
1.3.1 将工具链导出到环境变量
在终端中输入
export PATH=/usr/local/arm/arm-2009q3/bin:$PATH
但是此时只要关掉这个终端再另外打开一个立马就不行了。原因是我们本次终端中执行时的操作只是针对本终端,以后再打开的终端并未被执行过这个命令所以没导出。
解决方案:
在~/.bashrc中,在最下面添加环境变量
export PATH=/usr/local/arm/arm-2009q3/bin:$PATH
更新~/.bashrc文件, source ~/.bashrc
1.4 为工具链创建arm-linux-xxx符号链接
终端中输入: ln arm-none-linux-gnueabi-addr2line -s arm-linux-addr2line,即可通过arm-linux-addr2line访问ln arm-none-linux-gnueabi-addr2line
二、 搭建运行开发环境
2.1 tftp网络方式加载内核和设备树文件
- 将uImage和dtb文件放入到ubuntu中的/tftpboot
- 在开发板中设置uboot参数,使其能够去加载内核(根据自己实际的IP进行配置),或直接把配置过nfs服务的内核,经过编译得到的zImage烧录到开发板。
set ipaddr 192.168.1.10
set serverip 192.168.1.141
set bootcmd tftp 0x41000000 uImage \; tftp 0x42000000 exynos4412-fs4412.dtb \; bootm 0x41000000 - 0x42000000
save或saveenv
2.2 nfs网络方式加载rootfs
- 需要一个根文件系统目录–rootfs.tar.xz,需要解压到ubuntu
sudo tar -zxvf rootfs.tar.xz -C /x210_porting/rootfs
- 配置nfs服务器(需要安装),让/x210_porting/rootfs可以被挂载
sudo vim /etc/exports
/x210_porting/rootfs *(subtree_check,rw,no_root_squash,async)
sudo service nfs-kernel-server restart //重启nfs服务器,或sudo /etc/init.d/nfs-kernel-server restart
测试是否挂载成功
sudo mount -t nfs localhost:/x210_porting/rootfs /mnt
- 设置bootargs使开发板从nfs去挂载rootfs(内核配置记得打开使能nfs形式的rootfs)。在开发板中去指定内核要挂载/opt/…/rootfs–切换到开发操作。
setenv bootargs root=/dev/nfs nfsroot=192.168.1.141:/x210_porting/rootfs/rootfs ip=192.168.1.10:192.168.1.141:192.168.1.1:255.255.255.0::eth0:off init=/linuxrc console=ttySAC2,115200
save
reset //重启开发板
解释:
bootargs 是uboot传递给内核到启动参数,是一个字符串console=xxx: 告诉内核启动时候到调试信息是从哪个设备输出init=xxx: 告诉内核linux到第一个用户进程是什么root=xxx : 告诉内核根文件系统在哪里root=/dev/nfs 表示根文件系统在网路远端nfsroot=ip:pathip=xxx :告诉内核开机的时候内核的ip地址是多少(静态分配ip)
- 修改Makefile中的KERN_DIR使其指向自己建立的内核源码树,并将自己编译好的驱动.ko文件放入nfs共享目录下去
4、开发板启动后使用insmod、rmmod、lsmod等去进行模块实验
至此,我们具备了开发驱动的基础,我们将在之后一步步去探究驱动开发的奥秘。
参考资料
HQ驱动开发环境搭建-上
驱动开发环境搭建-下
华为云
相关文章:
2. 驱动开发--驱动开发环境搭建
文章目录前言一、Linux中配置编译环境1.1 linux下安装软件的方法1.2 交叉编译工具链的安装1.2.1 测试是否安装成功1.3 设置环境变量1.3.1 将工具链导出到环境变量1.4 为工具链创建arm-linux-xxx符号链接二、 搭建运行开发环境2.1 tftp网络方式加载内核和设备树文件2.2 nfs网络方…...
《数据库系统概论》学习笔记——第四章 数据库安全
教材为数据库系统概论第五版(王珊) 这一章简单记一下那几条sql的用法和两种存取控制和审计(今年期末考了)吧,不知道有啥好考的 数据库安全性 问题的提出 数据库的一大特点是数据可以共享数据共享必然带来数据库的安全…...
山洪径流过程模拟及洪水危险性评价
目录 1.洪水淹没危险性评价方法及技术讲解 2.GIS水文信息提取与分析(基于ArcGIS软件) 3.洪水淹没模拟水文分析:洪峰流量估算 4.洪水淹没模拟水力学分析:Hec-RAS实例操作 GIS水文分析(ArcHydro、Spatial Anlysist等模块)是流域…...
LeetCode HOT100 (23、32、33)
目录 23、合并K个升序链表 32、最长有效括号 33、搜索旋转排序数组 23、合并K个升序链表 思路:采用顺序合并的方法,用一个变量 ans 来维护以及合并的链表,第 i 次循i 个链表和 ans合并,答案保存到 ans中。 代码: …...
电力监控仪表主要分类
电力监控仪表是电工仪表行业的一个新兴、细分行业,类别属于安装式数字仪表,从模拟指针式仪表和电量变送器演变而来。随着计算机技术的发展,电力监控仪表已应用到电力系统的发、输、变、配、用的各个环节,实现对电网电参量的测量、…...
山野户外定位依赖GPS或者卫星电话就能完成么?
每当有驴友失联的新闻报道,很多的户外“老鸟”和“菜鸟”都在讲:为什么不带卫星电话,不带GPS……云云!提一个小小的问题:如果你拿着卫星电话、GPS或者其他即时通信的其他设备,你就能准定位你所处的位置么&a…...
SAP 应收应付重组配置
应收应付重组是为了使资产负债表真实的反映资产及负债的真实情况,需要对应收、应付账款的余额时行实际调整。即将“应收账款”的贷方余额和“应付账款”的借方余额分别调整至“预收账款”与“预付账款”账户中。 应收应付重组SAP系统是按照公司代码、客户/供应商、…...
算法练习(八)计数质数(素数)
1、问题描述: 给定整数 n ,返回 所有小于非负整数 n 的质数的数量 。 2、示例如下: 3、代码如下: 第一种:比较暴力的算法 class Solution {public int countPrimes(int n) {int count1;if(n<2) return 0;for(in…...
用反射模拟IOC模拟getBean
IOC就是spring的核心思想之一:控制反转。这里不再赘述,看我的文章即可了解:spring基础思想IOC其次就是java的反射,反射机制是spring的重要实现核心,今天我看spring的三级缓存解决循坏引用的问题时,发现一个…...
【Ap AutoSAR入门与实战开发02】-【Ap_s2s模块01】: s2s的背景
总目录链接==>> AutoSAR入门和实战系列总目录 文章目录 1 s2s的背景?2 AUTOSAR 方法应支持车辆的无缝开发2.1 面向服务的ECU的解读2.2 面向信号的ECU的解读2.3 通过网关ECU实现转换1 s2s的背景? Cp AutoSAR基于传统的can,lin,flexray总线的通信,一般是面向信号设…...
C语言数据结构(3)----无头单向非循环链表
目录 1. 链表的概念及结构 2. 链表的分类 3. 无头单向非循环链表的实现(下面称为单链表) 3.1 SListNode* BuySListNode(SLTDateType x) 的实现 3.2 void SListPrint(SListNode* plist) 的实现 3.3 void SListPushBack(SListNode** pplist, SLTDateType x) 的实现 3.4 voi…...
Android 实现菜单拖拽排序
效果图简介本文主角是ItemTouchHelper。它是RecyclerView对于item交互处理的一个「辅助类」,主要用于拖拽以及滑动处理。以接口实现的方式,达到配置简单、逻辑解耦、职责分明的效果,并且支持所有的布局方式。功能拆解功能实现4.1、实现接口自…...
通过window.open打开新的页面并修改样式添加内容
const img new Image(); img.src res; //res是图片的路径地址 const newWin window.open(, _blank); newWin.document.write(img.outerHTML); // newWin.document.body.style.background #000; newWin.document.body.style.textAlign center; newWin.document.body.oncl…...
Java中 Synchronized 的用法
《编程思想之多线程与多进程(1)——以操作系统的角度述说线程与进程》一文详细讲述了线程、进程的关系及在操作系统中的表现,这是多线程学习必须了解的基础。本文将接着讲一下Java线程同步中的一个重要的概念synchronized. synchronized是Java中的关键字,…...
Rust语言的基本介绍
rust缘起和目标 rust的英文是锈菌,是一种真菌,这种真菌的生命力非常顽强,其 在生命周期内可以产生多达5种孢子类型,这5种生命形态还可以相互转 化。“Rust”也有“铁锈”的意思,暗合“裸金属”之意,代表了R…...
新冠小阳人症状记录
原想挺过春节后再养,发现事与愿违。生理期期间抵抗力下降,所以在生理期第二天就有些症状了。可能是生理期前一天出去采购食物染上,也可能是合租夫妻染上。anyway,记录下自己的症状与相应有效的偏方: 第一天:…...
SQL零基础入门学习(十四)
上篇:SQL零基础入门学习(十三) SQL NULL 值 NULL 值代表遗漏的未知数据。 默认地,表的列可以存放 NULL 值。 如果表中的某个列是可选的,那么我们可以在不向该列添加值的情况下插入新记录或更新已有的记录。这意味着该…...
Excel工作表不能移动或复制?看看是不是这两个原因
Excel工作表不能移动或复制?今天来看看如何解决。 大家都知道,Excel表格分为工作簿和工作表,工作簿就是整个Excel文件;工作簿里面,也就是Excel表可以有多个工作表。 而各个工作表之间是可以相互移动或复制的…...
利用递归实现括号匹配
案例引入以下则是各个字符串经过括号处理之后的结果:12((21))(12-->12(21)1232((((2121)212(21)-->32(2121)212(21)ABDF((SA)SA)SA(SA)SA(((-->ABDF((SA)SA)SA(SA)SA算法思路:这个问题的解决方法就是将字符按顺序逐一加入到新的string容器store…...
14.线程数量怎么制定?
什么是CPU 密集型任务和耗时 IO 型任务 ? CPU 密集型任务 CPU 密集型任务,比如加密、解密、压缩、计算等一系列需要大量耗费 CPU 资源的任务。 耗时 IO 型任务 数据库、文件的读写,网络通信等任务,这种任务的特点是并不会特别消耗…...
C++中STL标准模板库学习记录
文章目录:1.vector1.1 遍历方式1.2 构造函数1.3 容量大小问题1.4 插入和删除1.5 存取值1.6 交换两个vectot的元素1.7 预定义存储空间2.string3. deque4. stack4.1 常用函数5. queue5.1 特点5.2 方法6. list6.1 优点6.2 缺点6.3 构造函数6.4 交换6.5 大小6.6 插入和删…...
《数据库系统概论》学习笔记——第六章 关系数据理论
教材为数据库系统概论第五版(王珊) 这一章重点在于各种范式的概念和将低级范式转为高级范式。一定要看多值依赖和4NF(因为这个概念很绕又烦,但是期中期末都考了)。最后计算题就是一定要会:算闭包࿰…...
Odoo | Webserivce | 5分钟学会【JSONRPC】接口开发
文章目录Odoo - JsonRPC1. Odoo内方法结构(接收端)2. POST接口请求结构(发送端)3. 实例测试Odoo - JsonRPC 1. Odoo内方法结构(接收端) # -*- coding: utf-8 -*- import odoo import logging import trac…...
搜广推 NeuralCF - 改进协同过滤+矩阵分解的思想
😄 NeuralCF:2017新加坡国立大学提出。【后文简称NCF】 😄 PNN:2016年上海交通大学提出。 文章目录 NeuralCF动机原理general NCFNCF终极版(GMF+MLP的结合)缺点优点ReferenceNeuralCF 动机 前面学了MF,可知MF在用户-物品评分矩阵的基础上做矩阵分解(用户矩阵Q和物品…...
dbever连接kerberos认证的hive
文章目录一、本地安装kerberos客户端二、本地kerberos客户端登录三、dbever连接hive一、本地安装kerberos客户端 下载地址:https://web.mit.edu/kerberos/dist/index.html 安装:下一步或者自定义安装即可 安装后会自动生成配置文件:C:\Pro…...
pom依赖产生的各种问题
文章目录问题一(org.apache.ibatis.session.Configuration)解决方法问题二(ERROR StatusLogger No log4j2)解决方法问题三(com.google.common.util.concurrent)解决方法问题四(start bean documentationPluginsBootstrapper)解决方法问题五(Unable to infer base url. )解决办法…...
RPC编程:RPC框架设计目标
一:前导知识 Http是超文本传输协议,跨平台性非常好。Http可以传输文本,更多的时候传输的是文本,我们也是可以传输二进制的,我们基于Http进行下载的时候,就是走的Http协议。 Tcp协议,处理的时候…...
RBAC 权限模型介绍
RBAC 权限: 一、关系: 这基于角色的访问控制的结构就叫RBAC结构。 二、RBAC 重要对象: 用户(Employee):角色施加的主体;用户通过拥有某个或多个角色以得到对应的权限。角色(Role&…...
西电面向对象程序设计核心考点汇总(期末真题)
文章目录前言一、往年真题与答案1.1 改错题1.2 读程题1.3 面向对象程序设计二、易错知识点2.1 构造函数2.2 静态成员变量和静态成员函数2.3 权限2.4 继承2.5 多态总结前言 主要针对西安电子科技大学《面向对象程序设计》的核心考点进行汇总,包含总共8章的核心简答。…...
判断一个用字符串表达的数字是否可以被整除
一.问题引出 当一个数字很大的时候,我们常用字符串进行表达,(超过了int和long等数据类型可以存储的最大范围),但是这个时候我们该如何判断他是否可以被另一个数整除呢? 这个时候我们不妨这样来考虑问题,每次将前边求模之后的数保存下来,然后乘以10和这一位的数字进行相加的操…...
自适应平台网站模板/百度一下百度百科
使用cairo库进行游戏画面绘制 界面分为游戏人物、路、障碍物,分别定义成结构体,记录坐标,状态,颜色等信息 游戏人物结构体 typedef struct _MAN{gint x;gint y;ManStatus status; }Man;对于画面的绘制,没有使用多线程,而是使用单次和循环计时器进行绘制 使用单次定时器绘…...
城乡建设部网官方网站/游戏app拉新平台
mybatis中执行,update函数,那么这个函数的返回值是matched(匹配的)行数还是changed(受影响的)行数呢? 默认情况下是matched记录数,并不是changed记录数 有什么区别吗?一…...
现在ps做网站的尺寸/免费b站软件推广网站
目录 1 安装php依赖的扩展2 下载解压PHP3 编译PHP4 让Apache支持PHP5 测试安装安装php依赖的扩展: 1 yum install -y libxml2-devel openssl-devel libcurl-devel libjpeg-devel libpng-devel libicu-devel openldap-devel 下载解压PHP: 在http://php.ne…...
百度云服务器做网站稳定吗/宁德市委书记
在编程过程中,经常会遇到四种修饰符来控制访问权限。之前对这个知识点没有研究过,一直是一知半解,每次遇到问题都模棱两可,不能给出一个确切的答案。近几天系统的看了看,也有了自己的一点心得体会。 正文: …...
ui设计的网站/企业seo如何优化
下载源码和示例1 原理:启动一个线程来刷时间,缺点是不太精确,可能跟线程的优先级有关系。会有0-10ms的误差。精确到0.1s是没有问题的。packagetimer;publicclassTimer ...{ private long interval; // private boolean enabled; pri…...
深圳大浪网站建设/产品怎么在网上推广
1、为什么要使用YARN? 为了提升集群的利用率、资源统一管理, 使用YARN为上层应用提供统一的资源管理和调度的平台。 2、YARN的优势? 资源的统一管理和调度: 集群中所有节点的资源(内存、CPU、磁盘、网络等)抽象为Container。计算…...