
——Linux驱动
EmbededCoder
C, Python, C++, Qt, MCU, RTOS, ARM Cortex-M, Linux
展开
-
DTS(设备树)
概念 Linux内核从3.x开始引入设备树的概念,用于实现驱动代码与设备信息相分离。在设备树出现以前,所有关于设备的具体信息都要写在驱动里,一旦外围设备变化,驱动代码就要重写。引入了设备树之后,驱动代码只负责处理驱动的逻辑,而关于设备的具体信息存放到设备树文件中,这样,如果只是硬件接口信息的变化而没有驱动逻辑的变化,驱动开发者只需要修改设备树文件信息,不需要改写驱动代码。比如在ARM Linux内...转载 2020-04-10 09:09:09 · 1318 阅读 · 0 评论 -
LINUX_KERNEL_PATH:=/lib/modules/`shell uname -r`/build
` 这个是主键盘上数字1左边那个键linux的shell中 `` 包裹的内容会先执行,然后把结果放回到shell中让后面的语句继续执行。例:echo `ls`会先执行ls,然后把ls产生的结果作为echo的参数最后执行echo反引号,和$()作用一样,用于在shell中执行命令,一般用$(),反引号容易看错.echo `sh uname -r`echo `una...原创 2019-11-22 13:46:59 · 734 阅读 · 0 评论 -
linux设备驱动makefile入门解析
一、模块的编译我们在前面内核编译中驱动移植那块,讲到驱动编译分为静态编译和动态编译;静态编译即为将驱动直接编译进内核,动态编译即为将驱动编译成模块。而动态编译又分为两种:a -- 内部编译在内核源码目录内编译b -- 外部编译在内核源码的目录外编译二、具体编译过程分析 注:本次编译是外部编译,使用的内核源...转载 2019-11-22 13:41:54 · 1005 阅读 · 0 评论 -
Ubuntu下编译Hello World驱动并运行全过程
HelloWorld.c#include<linux/init.h> //初始换函数#include<linux/kernel.h> //内核头文件#include<linux/module.h> //模块的头文件static int hello_init(void){ printk("aldrich Hello, world...原创 2019-11-21 20:27:06 · 882 阅读 · 0 评论 -
ubuntu18.04 实现 linux5.0下的helloword驱动
新建一个hello_world文件夹,文件里面建立一个hello_world.c和Makefilehello_world.c:#include <linux/module.h> #include <linux/init.h>...原创 2019-11-21 17:52:44 · 423 阅读 · 0 评论 -
linux驱动-设备树简单使用
本文章给出使用设备树来驱动板卡上的led灯的示例。设备树对gpio的描述如下:/ { gpio-leds{compatible = "gpio-leds";led1{label = "led1";gpios = <&tegra_main_gpio TEGRA_MA...转载 2019-11-12 16:39:01 · 404 阅读 · 0 评论 -
嵌入式linux驱动编写编译要点(只适合新手看)
以一个简单的LED驱动及按键驱动编写为例1.驱动编写要点:linux 2.6 以上版本很多函数的名称和以前有所不同,如果学习资料年份比较早,按此操作可能会出现很多问题,这会让初学者感到非常困惑:为什么完全按照视频/书中操作,视频/书中没有问题,我的总是出现很多错误?驱动程序有以下几个函数有更新:a 设备节点创建 class_device_create 更新为device_crea...转载 2019-07-16 16:28:14 · 547 阅读 · 0 评论 -
Linux系统的嵌入式驱动开发代码流程简单讲解
第一步:了解一个重要的数据结构struct file_operation{ssize_t (*read)(......);ssize_t(*write)(......);int (*ioctl)(..........);int (*open)(.......);int (*release)(.......);//..............}结构体file_...转载 2019-07-16 16:25:51 · 825 阅读 · 0 评论 -
自旋锁(spinlock) 解释得经典,透彻
自旋锁与互斥锁有点类似,只是自旋锁不会引起调用者睡眠,如果自旋锁已经被别的执行单元保持,调用者就一直循环在那里看是否该自旋锁的保持者已经释放了锁,"自旋"一词就是因此而得名。 由于自旋锁使用者一般保持锁时间非常短,因此选择自旋而不是睡眠是非常必要的,自旋锁的效率远高于互斥锁。 信号量和读写信号量适合于保持时间较长的情况,它们会导致调用者睡眠,因此只能在进程上下文使用(_trylock的...转载 2019-07-10 13:10:25 · 3472 阅读 · 0 评论 -
Linux驱动之IIC总线
<作用>电子设备中有很多IIC设备之间需要进行相互通信,这样就产生了IIC总线,常用来实现设备之间的数据通信。<IIC总线结构>IIC总线只有两条线,一条是串行数据线(SDA),另外一条是串行时钟线(SCL).注:每一个连接到总线上的设备都有一个唯一的地址可以访问(这一点有点像USB设备)<IIC总线信号类型>a:开始信号(S):当SCL...转载 2019-07-10 12:51:04 · 258 阅读 · 0 评论 -
Linux 驱动中MODULE_DEVICE_TABLE的理解
在LinuxIIC驱动中看到一段代码:-------------------------------------------------------------------------static struct platform_device_id xx_driver_ids[] = { { .name = "s3c2410-i2c", .drive...原创 2019-06-03 13:47:11 · 13364 阅读 · 0 评论 -
在Linux下写一个简单的驱动程序
Linux驱动自然和内核版本密切相关,可通过下面的命令来查看下当前使用的内核版本uneme -r我使用的是ubuntu12.04它使用的内核版本为3.8.0-29-generic,同时这一点也能通过cd到/usr/src目录下查看下得到证实,/usr/src目录下存在一个linux-headers-3.8.0-29-generic的文件夹,通过名字含义也可得知它是为我们编译内核相关程序提供头...转载 2019-04-15 16:12:29 · 748 阅读 · 0 评论