- 博客(26)
- 收藏
- 关注
原创 十八、(正点原子)Linux内核RTC驱动
RTC 设备驱动是一个标准的字符设备驱动,应用程序通过 open、 release、 read、 write 和ioctl等函数完成对 RTC 设备的操作。Linux 内核将 RTC 设备抽象为 rtc_device 结构体,因此 RTC 设备驱动就是申请并初始化rtc_device,最后将 rtc_device 注册到 Linux 内核里面,这样 Linux 内核就有一个 RTC 设备了。定义在 include/linux/rtc.h 文件中/* 设备 */int id;/* ID */
2024-07-21 20:39:17
842
原创 十七、(正点原子)Linux LCD驱动
在 Linux 中应用程序通过操作 RGB LCD 的显存来实现在 LCD 上显示字符、图片等信息。先来看一下裸机 LCD 驱动如下:①、初始化 I.MX6U 的 eLCDIF 控制器,重点是 LCD 屏幕宽(width)、高(height)、 hspw、hbp、 hfp、 vspw、 vbp 和 vfp 等信息。②、初始化 LCD 像素时钟。③、设置 RGBLCD 显存。④、应用程序直接通过操作显存来操作 LCD,实现在 LCD 上显示字符、图片等信息。
2024-07-21 17:34:10
723
原创 十六、(正点原子)Linux自带按键驱动程序
Linux 内核也自带了 KEY 驱动,如果要使用内核自带的 KEY 驱动的话需要配置 Linux 内核,不过 Linux 内核一般默认已经使能了 KEY 驱动,但是我们还是要检查一下。选中以后就会在文件中出现“”这一行, Linux 内核就会根据这一行来将 KEY 驱动文件编译进 Linux 内核。Linux 内核自带的 KEY 驱动文件为采用了驱动框架,在 KEY 驱动上使用了子系统实现。可以看出,这就是一个标准的驱动框架,如果要使用设备树来描述 KEY 设备信息的话,设备节点的属性值要设置为“
2024-07-17 16:05:27
922
原创 十五、(正点原子)Linux INPUT子系统
input就是输入的意思,因此input子系统就是管理输入的子系统,和pinctrlgpio子系统一样,都是 Linux 内核针对某一类设备而创建的框架。比如按键输入、键盘、鼠标、触摸屏等等这些都属于输入设备,不同的输入设备所代表的含义不同,按键和键盘就是代表按键信息,鼠标和触摸屏代表坐标信息,因此在应用层的处理就不同,对于驱动编写者而言不需要去关心应用层的事情,我们只需要按照要求上报这些输入事件即可。为此input子系统分为input驱动层、input核心层、input。
2024-07-16 21:37:28
1107
原创 十四、(正点原子)Linux MISC驱动
的意思是混合、杂项的,因此驱动也叫做杂项驱动,也就是当我们板子上的某些外设无法进行分类的时候就可以使用驱动。驱动其实就是最简单的字符设备驱动,通常嵌套在 platform 总线驱动中,实现复杂的驱动。
2024-07-16 19:47:22
567
原创 十三、(正点原子)Linux自带的LED灯驱动
LED 灯驱动文件为,可以打开# LED Core...........如果定义了的话就会编译这个文件,选择将 LED 驱动编译进 Linux 内核,在.config 文件中就会有“”这一行,因此驱动文件就会被编译。接下来我们看一下{},},/* 驱动注册函数 */为LED驱动的匹配表,compatible属性就是匹配的对象,我们在设备中LED灯节点的compatible属性要与匹配表一致,函数才能执行,否者驱动没法工作。Linux 内核自带的 LED 驱动采用了platform框架。
2024-07-15 22:01:39
929
原创 十二、(正点原子)platform设备驱动
假如现在有三个平台 A、 B 和 C,这三个平台(这里的平台说的是 SOC)上都有 MPU6050 这个 I2C接口的六轴传感器,按照我们写裸机 I2C 驱动的时候的思路,每个平台都有一个 MPU6050的驱动,因此编写出来的最简单的驱动框架如图:每种平台下都有一个主机驱动和设备驱动,主机驱动肯定是必须要的,毕竟不同的平台其 I2C 控制器不同。
2024-07-15 19:42:29
855
原创 十一、(正点原子)Linux异步通知
异步通知就是用户空间想对驱动空间读或者写某个数据时,不需要一直去查看此数据是否可读或可写,可以去执行其他的任务,当要读或写的数据可以被读或写的时候,驱动空间会向用户空间发送一个信号。当空户空间接收到这个信号时,就停止现在的任务去执行读或写数据。
2024-07-15 18:05:22
1191
原创 十、(正点原子)Linux阻塞和非阻塞IO
应用程序对设备驱动进行操作的时候,如果不能获取到设备资源,那么阻塞式IO就会将应用程序对应的线程挂起,直到设备资源可以获取为止。应用程序调用read函数从设备中读取数据,当设备不可用或数据未准备好的时候就会进入到休眠态。等设备可用的时候就会从休眠态唤醒,然后从设备中读取数据返回给应用程序。注:当我们应用程序打开驱动程序时候,默认以阻塞方式打开的。2、等待队列。
2024-07-12 17:24:22
758
原创 九、(正点原子)Linux中断
上半部:上半部就是中断处理函数,那些处理过程比较快,不会占用很长时间的处理就可以放在上半部完成。下半部:如果中断处理过程比较耗时,那么就将这些比较耗时的代码提出来,交给下半部去执行,这样中断处理函数就会快进快出。因此, Linux 内核将中断分为上半部和下半部的主要目的就是实现中断处理函数的快进出,那些对时间敏感、执行速度快的操作可以放到中断处理函数中,也就是上半部。如果要处理的内容不希望被其他中断打断,那么可以放到上半部如果要处理的任务与硬件有关,可以放到上半部。
2024-06-25 18:04:09
928
原创 八、(正点原子)Linux内核定时器实验
在FreeRTOS或者UCOS中需要一个硬件定时器提供系统时钟,一般使用Systick作为系统的时钟源。同理, Linux 要运行,也是需要一个系统时钟,Linux内核会选择Cortex-A7内核中的一个通用定时器来作为Linux系统的时钟源,对于Linux驱动编写来说,我们不需要深入研究怎么选择时钟源,怎么配置时钟源,Linux内核编写者已经编写好了,我们只需要会使用相应的API函数即可。Linux 内核中有大量的函数需要时间管理,比如周期性的调度程序、延时程序、对于我们驱动编写者来说最常用的定时器。
2024-06-23 12:59:28
940
原创 七、(正点原子)Linux并发与竞争
并发就是多个“用户”同时访问同一个共享资源,带来的问题就是竞争问题。Linux 系统是个多任务操作系统,会存在多个任务同时访问同一片内存区域,这些任务可能会相互覆盖这段内存中的数据,造成内存数据混乱。针对这个问题必须要做处理,严重的话可能会导致系统崩溃。多线程并发访问抢占式并发访问中断程序并发访问SMP(多核)间并发访问举一个简单的例子:比如说C语言中a = 31 ldr r0, =0X30000000 /* 变量 a 地址 */2 ldr r1, = 3 /* 要写入的值 */
2024-06-18 14:10:40
1017
原创 六、(正点原子)pinctrl子系统和gpio子系统
前面我们使用设备树来驱动LED灯,其实就是将LED寄存器地址写入到设备树的属性中,通过函数 ,读取到LED灯的寄存器信息,从而操作寄存器来控制LED灯。在操作LED灯时候,我们使用到GPIO这个引脚,通过对这个GPIO的控制来实现LED灯的控制。
2024-06-16 14:51:34
930
原创 五、(正点原子)设备树下的LED驱动
1、知道如何在设备树中创建一个节点。并能够将节点的属性添加成功。2、在驱动中,能够使用OF函数对设备树的属性值进行提取,获得相关硬件的信息:比如寄存器地址等等。3、能够掌握驱动程序框架。
2024-06-13 15:57:45
557
原创 四、(正点原子)Linux设备树
设备树(Device Tree),就是具有树形结构的设备统一管理。描述设备树的文件叫做(Device Tree Source)这个文件采用树形结构描述板级设备,也就是开发板上的设备信息。例如:树的主干就是系统总线,控制器、控制器、控制器等都是接到系统主线上的分支。控制器有分为和两种,其中上接了和这两个设备,上只接了这个设备。
2024-06-10 15:02:53
809
原创 三、(正点原子)新字符设备驱动
前面我们字符设备驱动开发使用的是函数注册字符设备,函数注销字符设备,驱动模块加载成功后我们还需要手动使用mknod命令创建设备结点。和是老版本的的驱动使用的函数,新的字符设备驱动使用Linux内核推荐的新字符设备驱动API函数。
2024-06-09 13:31:25
1027
原创 一、(正点原子)字符设备驱动
字符设备是 Linux 驱动中最基本的一类设备驱动,字符设备就是一个一个字节,按照字节流进行读写操作的设备,读写数据是分先后顺序的。比如我们最常见的点灯、按键、 IIC、 SPI,LCD 等等都是字符设备,这些设备的驱动就叫做字符设备驱动。Linux应用程序对驱动的调用:在Linux中一切皆文件。驱动加载成功以后会在“/dev”目录下生成一个相应的文件。应用程序通过对这个名为“/dev/xxx” (xxx 是具体的驱动文件名字)的文件进行相应的操作即可实现对硬件的操作。
2024-06-03 17:40:39
948
原创 (正点原子)根文件系统构建
"忙碌的盒子",上面说过,根文件系统就是一堆的文件和文件夹,很多命令的文件,软件的文件,我们使用时不希望一个一个从网上下载,所以BusyBox就是一个相当于一个软件,把这些我们常用的命令,软件等文件都收集起来,在进行打包,它集成了Linux的许多工具和命令。BusyBox 可以在其官网下载,官网地址为: https://busybox.net/
2024-06-02 11:18:49
892
原创 (正点原子)NXP官方EVK开发板Linux内核移植到正点原子阿尔法开发板
distclean:清理工程。:Linux内核的配置文件,在arch/arm/configs 里面。选用imx_v7_mfg_dfconfig因为这个可以用NXP的一个mfgtool工具烧写。:Linux内核的图形化界面。:编译所有文件。编译完成后,会在arch/arm/boot/ 生成zImage镜像和/arch/arm/boot/dts/多个设备数文件我们所需要的设备树文件为imx6ull-14x14-evk-emmc.dtb。
2024-05-21 16:45:33
928
原创 (正点原子)正点原子Linux内核编译
再次编译,编译完成以后就会在 arch/arm/boot 这个目录下生成一个叫做 zImage 的文件, zImage 就是我们要用的 Linux 镜像文件。SOC厂商也是从官网下载一个版本的Linux内核,根据自己的情况对这个版本的Linux内核进行修改,并且自己维护,一般推荐使用SOC厂商提供的Linux内核在根据自己的开发板进行编译和修改。官网提供各个版本的Linux内核,可以下载一个版本的Linux内核,根据自己的需求对内核进行修改,但是难度很大,一般不推荐。说明Linux内核的移植成功。
2024-05-20 17:14:56
812
原创 (正点原子)NXP官方UBOOT添加阿尔法开发板
I.MX6UL/ULL 内部有个以太网 MAC 外设,也就是 ENET,需要外接一个 PHY 芯片来实现网络通信功能,也就是内部 MAC+外部 PHY 芯片的方案。大家可能听过 DM9000 这个网络芯片,在一些没有内部 MAC 的 CPU 中,比如三星的 2440, 4412 等,就会采用 DM9000 来实现联网功能。DM9000 提供了一个类似 SRAM 的访问接口,主控 CPU 通过这个接口即可与DM9000 进行通信, DM9000 就是一个 MAC+PHY 芯片。
2024-05-20 15:11:44
783
原创 (正点原子)Linux系统Uboot编译和烧写
Mfgtool工具先向开发板烧写一个linux系统,通过linux系统来完成烧写工作。一般烧写系统都是烧写到EMMC或者NAND里面,烧写zImage和.dtb设备数sync:数据同步,当在linux下拷贝文件时,在终端需要先同步,不然文件存放在缓存中,可能拷贝失败。查看sd卡挂载:ls /dev/sd*,或者sudo fdisk -l。
2024-05-13 21:39:54
444
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人