![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Linux驱动编程
文章平均质量分 60
本专栏主要介绍linux下的驱动
水枂
这个作者很懒,什么都没留下…
展开
-
u-boot新增命令后出现data abort
(一)问题描述u-boot下新增了一条update的命令,直接输入update没有报错,但是输入up按TAB键补全时发现出现data abort,而且输入不支持的命令也会有data abort(二)解决方法最开始我包含的头文件为:#include <command.h>#include <common.h>头文件改为下面后问题解决,但顺序不是最重要的原因,而是我用到了strncmp函数,头文件包含顺序出错#include <common.h>#incl原创 2021-06-15 20:30:22 · 597 阅读 · 1 评论 -
从Linus Torvalds一封发飙的电邮开始谈设备树究竟是棵什么树?
以下文章来源于微信公众号嵌入式客栈,作者逸珺[导读] 新版的U-Boot以及内核都引入了设备树,那么这究竟是棵什么样的树呢?长啥样?有啥用?为啥弄个这样的树?本文基于对设备树标准的理解,来学习整理一下相关的要点,供大家参考。Linux为啥要设备树?在Linux3.x之前的内核源码中,存在大量对板级细节信息描述的代码。这些代码充斥在/arch/arm/plat-xxx和/arch/arm/mach-xxx目录,而且更严重的问题是,由于ARM商业生态模式,基于ARM IP授权模式,产生越来越多AR.转载 2020-09-09 19:56:45 · 210 阅读 · 0 评论 -
permission denied是什么鬼?
问题:在PC端编译了一个arm芯片的测试程序,出现了permission denied解决办法:1.给文件赋予可执行权限 chmod a+x xxx这是一般第一反应会想到的答案2. 有时候已经有可执行权限,还是提示上面的错误此时要注意你的交叉编译器是否正确,就比如我的内核使用arm-hisiv400-linux-gcc,而我编译测试代码使用的是arm-himix100-linux,虽然编译完全正确,但是也会报错误,解决办法就是使用同一版本的交叉编译器...原创 2020-06-03 20:40:37 · 1357 阅读 · 0 评论 -
解决linux下QtCreator无法输入中文的情况
安装了QtCreator(Qt5.3.1自带版本)后无法输入中文,确切的说是无法打开输入法。以前使用iBus输入法的时候没有这个问题,现在使用sougou输入法才有的这个问题。可以查看此文 http://www.cnblogs.com/oloroso/p/5114041.html原因有问题就得找原因,搜狗输入法是基于fcitx来做的,那么可能是缺少了相关的库支持。解决办法先安装fcitx...转载 2020-04-21 11:30:33 · 253 阅读 · 0 评论 -
arm开发板通过网线连接笔记本电脑上外网
需要工具:arm开发板,网线,一台双网卡的win7笔记本电脑(笔记本电脑一般都是双网卡)一、笔记本电脑需要先连上外网,可以连上家里的WIFI,或者手机开热点(本人未测试过连接手机的热点,但是理论上应该可行)。二、打开网络共享中心->更改适配器设置->无线网络连接->属性->共享->允许其他网络用户通过此计算机连接->选择本地连接->确定三、完成第二部...转载 2020-04-20 22:33:49 · 1729 阅读 · 0 评论 -
能ping通ip但无法ping通域名和localhost //ping: bad address 'www.baidu.com'
错误描述:~ # ping localhostping: bad address 'localhost'原因,在/etc目录下缺少hosts文件,将linux中的/etc hosts文件拷入即可~ # ping localhostPING localhost (127.0.0.1): 56 data bytes64 bytes from 127.0.0.1: seq=0 ttl=64...转载 2020-04-20 22:28:55 · 1141 阅读 · 0 评论 -
移植QT到tiny4412开发板
(一) 环境准备ubuntu16.04交叉编译工具:arm-linux-gcc-4.5.1-v6-vfp-20120301.tgzlinux内核版本:linux-3.5上面交叉编译工具提供的是4.5版本的,这个Qt官方有qt-everywhere-opensource-src-5.7.0.tar.gz,安装arm-linux-gnueabihf-gcc:c++$ sudo apt i...原创 2020-04-20 14:52:37 · 1436 阅读 · 0 评论 -
tiny4412移植tslib库
1、将tslib-1.4.tar.gz拷贝到虚拟机某个路径进行解压2、进入解压路径tslib3、执行#./autogen.sh如果提示:./autogen.sh: 4: ./autogen.sh: autoreconf: not found原因:没有安装automake工具,解决办法:需要安装此工具:apt-get install autoconf automake libtool...原创 2020-04-16 09:18:34 · 395 阅读 · 0 评论 -
关于gedit的编码问题
今天由于gedit的编码格式导致LCD显示屏的问题,开始没有想到后来才发现,在这记录一下#include <stdio.h>#include <unistd.h>#include <stdio.h>#include <fcntl.h>#include <linux/fb.h>#include <sys/mman.h&...原创 2020-04-14 22:56:24 · 1005 阅读 · 0 评论 -
(十三)linux中断底半部分处理机制
这篇文章介绍一下linux中断的底半部分的tasklet和workquene两种处理机制,其中tasklet中不能有延时函数,workquene的处理函数可以加入延时操作目录(一)tasklet小任务处理机制(1)tasklet相关函数接口(2)tasklet使用流程(3)tasklet实例代码(二)workquene工作队列处理机制(1)workqueue相关函数接口(2)共享工作队列使用...原创 2020-04-05 11:57:44 · 413 阅读 · 0 评论 -
(十二)linux内核定时器
(一)内核定时器介绍内核定时器并不是用来简单的定时操作,而是在定时时间后,触发事件的操作,类似定时器中断,是内核用来控制在未来某个时间点(基于jiffies)调度执行某个函数的一种机制,内核中采用的定时器以jiffies为单位。 单位秒=jiffies/HZ几个重要跟时间有关的名词或变数HZ:Linux核心每隔固定周期会发出timer interrupt (IRQ 0),HZ是用来定义每一秒...原创 2020-04-04 22:37:31 · 214 阅读 · 0 评论 -
(十一)linux之poll轮询
(一)poll轮询的作用以阻塞的方式打开文件,那么对多个文件读写时,若某个文件未准备好,则系统会处于读写阻塞,并影响其他文件的读写,poll轮训就是实现既可使用输入输出流又不想阻塞在任何一个设备的读写操作调用poll函数返回时,会返回一个文件是否可读写的标志状态,用户程序根据不同的标志状态来读写相应的文件,实现阻塞方式打开但是非阻塞方式读写的结果(二)poll轮询相关的接口系统层接口:...原创 2020-04-04 21:54:17 · 1886 阅读 · 0 评论 -
(十)Linux之等待队列
(一)阻塞和非阻塞阻塞:执行设备操作时,若不能获得资源,则挂起进程进入休眠直到满足可操作的条件后再操作。非阻塞:进程在不能进行设备操作时,并不挂起,它要么放弃,要么不停地查询,直至可以进行操作为止。(二)为什么学习等待队列在讲解等待队列的作用之前先来看一下内核的休眠机制:正在运行的进程让出CPU,休眠的进程会被内核搁置在一边,只有当内核再次把休眠的进程唤醒,进程才会重新在CPU运行,...原创 2020-04-02 21:27:10 · 368 阅读 · 0 评论 -
(九)linux中断编程
目录(一)linux中断的介绍(二)内核中断的操作过程(三)实例代码(一)linux中断的介绍linux内核中的中断通过中断子系统来管理。linux系统中有专门的中断子系统,原理很复杂,驱动开发者不需要知道具体细节,只需要知道如何应用该子系统提供的api来编写中断驱动代码即可在linux内核中,文件大多以功能命名,内核中提供了一个interrupt.h的文件用来进行中断先关接口及数据结构的声...原创 2020-04-01 22:02:46 · 418 阅读 · 1 评论 -
(八)linux驱动之ioctl的使用
这篇文章给大家讲解一下ioctl的简单使用,关于ioctl更详细的教程后面有机会单独写出来(一)什么是ioctlioctl是设备驱动程序中对设备的I/O通道进行管理的函数。所谓对I/O通道进行管理,就是对设备的一些特性进行控制,例如串口的传输波特率、马达的转速、网卡速率等等。它的调用方式如下://在应用调用int ioctl(int fd, int cmd, …);其中fd是用户程...原创 2020-04-01 21:38:23 · 2702 阅读 · 0 评论 -
(七)linux函数接口的使用
前面我们讲解了字符设备的驱动模型,有了前面的基础后,几天学习函数接口就比较容易了目录(一)open函数接口(二)read函数接口(三)lseek函数接口(四)用户空间和用户空间交换数据(五)通过设备节点提取设备号(六)映射ioremap(七)实例:LED驱动编程思考一个问题:当我们应用层调用open、read、write、close的时候,内核层是如何实现的呢?前面学习字符设备驱动模型中...原创 2020-04-01 17:19:46 · 456 阅读 · 0 评论 -
(五)Linux之设备驱动模型
(一)Linux内核驱动简介对于刚接触linux驱动的同学来说,应该思考一个问题就是为什么要有Linux内核驱动呢?原因就是Linux内核对设备的驱动编写进行了规范我们在linux系统的/dev目录下可以查看设备节点文件,这些节点文件是怎么存在的也是值得思考的,本篇文章将会讲解一个杂项设备驱动模型、早期经典字符设备驱动模型,都是针对字符设备进行讲解的。通过ls选项看到,文件权限前面的符号表...原创 2020-03-25 23:21:22 · 215 阅读 · 1 评论 -
(四)Linux内核模块化编程
目录(一)模块化编程简介(二)安装卸载模块命令.(三)将自定义功能添加到内核三种方法(1)修改Kconfig和Makefile(2)直接修改功能对应目录下的Makefile文件(3)在内核目录中,将功能编译成模块文件,后期加载到内核中(四)模块文件模板(五)单模块编程(六)多模块编程(1)多个模块编译成多个.ko文件(2)多个模块编译成一个.ko文件(七)向模块传参(一)模块化编程简介Linu...原创 2020-03-25 13:42:15 · 1028 阅读 · 0 评论 -
(三)linux之根文件系统的制作
(一)准备工作Ubuntu 16.04系统linux-3.5内核:linux-3.5-20190929交叉编译工具arm-linux-gcc-4.5.1-v6-vfp-20120301.rarbusybox源码包:busybox-1.21.1.rar(二)工具介绍(1)交叉编译器这个其实之前就已经讲过了,不懂的参考我的另一篇文章linux安装交叉编译环境交叉编译器和本地编译器是...原创 2020-03-18 15:50:53 · 476 阅读 · 0 评论 -
(二)linux内核镜像制作
(一)目的在进行嵌入式开发的时候,我们往往会先在电脑上安装交叉编译器,然后编译目标板上的代码,最后把代码下载到电路板中,嵌入式系统组成包括:BootLoader+kernel+filesystem+application,前面我们已经制作好了BootLoader,这一节我们制作一个kernel镜像(二)工具linux-3.5版本内核Ubuntu 16.04linux交叉编译环境(我已经...原创 2020-03-13 22:18:22 · 829 阅读 · 0 评论 -
(一)uboot的移植与制作
目录(一)环境(二)流程分析(三)具体步骤在裸机启动流程里涉及到BL1,BL2为系统的加载启动项,全称为BootLoader。Boot Loader 是在操作系统内核运行之前运行的一段小程序。通过这段小程序,我们可以初始化硬件设备、建立内存空间的映射图,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统内核准备好正确的环境。通常,Boot Loader 是严重地依赖于硬件而实现的...原创 2020-03-13 21:58:32 · 1341 阅读 · 0 评论 -
linux安装交叉编译环境
(一)交叉编译器的简介(1)本地编译在了解交叉编译之前我们首先介绍一下另一个概念:本地编译之前所做的C开发属于本地编译,即在当前PC下(x86的CPU下),直接编译出可以运行的程序(或者库文件),其直接在当前的环境(即x86的CPU下),此时的编译称为本地编译,即在当前平台下,编译出来的程序,只能放到当前平台下运行。(2)交叉编译(cross compile)交叉编译和本地编译为相对应的...原创 2020-03-14 09:54:38 · 10759 阅读 · 2 评论 -
uboot启动流程分析
Uboot的启动流程分为两个阶段,第一阶段主要是汇编语言编写,第二阶段是C语言编写,每个阶段所做的工作不同,这篇文章分析的是uboot 2010版,以tiny4412的uboot为例。启动过程涉及的主要文件:arch/arm/cpu/armv7/start.Sboard/samsung/myboard/lowlevel_init.Sarch/arm/lib/crt0.Sarch/ar...原创 2020-03-12 23:25:54 · 469 阅读 · 0 评论 -
Uboot启动
(一)uboot 配置编译分析u-boot源码是通过gcc和Makefile组织编译的,顶层目录下的Makefile可通过boards.cfg来设置开发板的定义然后递归调用各级子目录下的Makefile,把编译过的程序连接成u-bootboards.cfg文件:开发板在Makefile下配置定义,例如:TargetARCHCPUBoard name(开发版名)Vendor...原创 2020-03-12 16:55:44 · 218 阅读 · 0 评论