- 博客(46)
- 收藏
- 关注
原创 Linux学习笔记--UART子系统
name = "ttyVIRT", // 控制台名称.write = virt_uart_console_write, // 控制台写入函数.device = virt_uart_console_device, // 控制台设备函数.flags = CON_PRINTBUFFER, // 控制台标志.index = -1, // 自动分配索引.data = &virt_uart_drv, // 关联的UART驱动。
2025-10-31 21:02:40
669
原创 Linux学习笔记--中断子系统
中断处理函数probe 函数获取 GPIO 数量作用:从设备树节点中统计 GPIO 属性的数量。设备树: 会返回 3,因为有3个GPIO定义。作用:为所有 GPIO 按键分配连续的内存空间。内存布局: 分配并清零内存 表示在内核空间分配内存获取 GPIO 信息和标志参数::设备树节点:GPIO 的索引(0, 1, 2...):输出参数,获取 GPIO 标志返回值:GPIO 编号,用于后续的 GPIO 操作GPIO 标志可能包括::高电平
2025-10-29 16:38:59
779
原创 Linux学习笔记--GPIO控制器驱动
模块加载→ 注册平台驱动设备匹配→ 设备树中找到 compatible="100ask,virtual_gpio" 的节点驱动探测分配并初始化 gpio_chip设置操作函数从设备树读取 GPIO 数量注册到 GPIO 子系统用户访问通过 /sys/class/gpio 接口或其他驱动通过 GPIO 子系统 APIGPIO操作→ 调用对应的虚拟函数,操作内存变量。
2025-10-17 20:18:17
461
原创 Linux学习笔记--GPIO子系统LED驱动
/ 主设备号,0表示自动分配// 设备类// GPIO 描述符模块加载:调用led_init()→ 注册平台驱动设备匹配:内核发现设备树中有 compatible="100ask,leddrv" 的设备驱动探测:调用获取 GPIO 资源注册字符设备创建设备节点 (/dev/100ask_led0)用户操作→ 初始化 GPIO→ 控制 LED 亮灭模块卸载:清理所有资源GPIO(General Purpose Input/Output)子系统是Linux内核中用于管理通用输入输出引脚的核心框架。
2025-10-17 14:50:00
936
原创 Linux学习笔记--Pinctrl子系统驱动
系统启动模块加载,注册 platform_driver匹配设备树节点,调用 probe 函数注册 pinctrl_desc,创建 pinctrl_dev。
2025-10-16 19:57:39
628
原创 Linux学习笔记--Pinctrl的数据结构
特性性质静态描述符动态设备实例内容操作函数、引脚描述运行时状态、私有数据生命周期编译时确定运行时创建和销毁数量每个驱动一个每个硬件实例一个用途定义控制器能力管理控制器状态&iomuxc {/* 在设备节点中引用 */&uart4 {特性性质静态配置描述动态执行实例内容名称、类型、配置数据选择器、控制器、配置值创建时机设备树解析时设备驱动初始化时用途描述"应该做什么"执行"具体怎么做"数据形式字符串名称数字选择器。
2025-10-16 16:58:21
662
原创 Linux学习笔记--Pinctrl子系统示例
Pinctrl:Pin Controller,顾名思义,就是用来控制引脚的:引脚枚举与命名(Enumerating and naming)引脚复用(Multiplexing):比如用作GPIO、I2C或其他功能引脚配置(Configuration):比如上拉、下来、open drain、驱动强度等Pinctrl驱动由芯片厂家的BSP工程师提供,一般的驱动工程师只需要在设备树里:指明使用那些引脚复用为哪些功能配置为哪些状态。
2025-10-16 14:58:57
314
原创 Linux学习笔记--触摸屏驱动
结果:定时器在"当前时间 + 10ms"后再次触发。在触摸持续期间,定时器每 10ms 触发一次。典型触摸屏的采样率在 60-120Hz 之间。确保编译器不会优化对这些寄存器的访问。: 当前时间(从系统启动开始的节拍数)持续上报触摸坐标,实现触摸移动的跟踪。定时器轮询可以捕获这些连续的坐标变化。: 将 10ms 转换为对应的节拍数。但在触摸过程中,手指可能持续移动。这个结构体映射到硬件的内存区域。中断只在触摸开始和结束时触发。:每秒采样 100 次坐标。太频繁:CPU 占用率高。太稀疏:触摸轨迹不连贯。
2025-10-11 21:02:29
258
原创 Linux学习笔记--输入设备(input_dev)驱动框架
全局变量和中断处理全局变量中断服务程序 当硬件中断发生时调用: 上报输入事件: 表示一组事件结束 需要替换为实际的按键码(如 )使用设备资源管理 API 分配输入设备结构体。设置设备名称、物理路径、父设备和各种 ID。4. 设置具体的事件码这里设置了多点触控(Multi-touch)相关的事件。设置 X、Y 坐标的范围为 0-65535。向输入子系统注册设备。 从平台设备获取中断资源注册中断处理函数,上升沿触发 函数是 Lin
2025-10-11 16:57:28
375
原创 Linux学习笔记--异步通知方式读取输入数据
应用程序告诉驱动程序:"当有数据时,请发送信号通知我"驱动程序在数据就绪时向应用程序发送指定信号应用程序在信号处理函数中读取数据。
2025-10-11 10:44:46
308
原创 Linux学习笔记--POLL_SELECT方式读取输入数据
允许程序同时监视多个文件描述符,等待其中任何一个变为可读、可写或有异常条件。:内核将应用程序要监视的文件描述符和事件类型记录下来。: 超时时间(毫秒),5秒后如果没有事件则返回。:如果指定的超时时间到达,内核也会唤醒进程。:调用进程被放入等待队列,进入睡眠状态。: 监视的文件描述符数量(这里是 1):一次系统调用可以监视多个文件描述符。文件描述符数量有限(通常 1024):进程不需要主动轮询每个文件描述符。:内核持续监视所有注册的文件描述符。:内核在事件发生时通知应用程序。无文件描述符数量限制。
2025-10-10 18:37:30
326
原创 Linux学习笔记--查询_唤醒方式读取输入数据
如果命令行第三个参数是 "noblock",则以非阻塞模式打开设备。程序会阻塞在 read() 调用,直到有输入事件发生。程序会立即返回,如果没有事件则显示错误信息。标志使得 read 操作不会阻塞程序。用于标记一组事件的结束。
2025-10-10 17:49:41
152
原创 Linux学习笔记--获取输入设备信息
bit=0: 00001011 & 00000001 = 1 → 支持 EV_SYN。bit=1: 00001011 & 00000010 = 2 → 支持 EV_KEY。bit=2: 00001011 & 00000100 = 0 → 不支持。这种位图机制高效地表示了设备支持的大量事件类型,节省了内存和传输开销。获取设备支持的事件类型位图,然后逐位检查并打印支持的事件类型名称。如果某位被设置为 1,表示设备支持该事件类型。:从名称数组中获取对应的事件类型名称。:计算当前位对应的事件类型编号。
2025-10-10 17:02:31
166
原创 Linux学习笔记--IIC子系统
APP:只需要调用设备驱动程序提供的接口IIC设备驱动:知道设备地址、数据格式IIC控制器驱动:根据IIC协议发出各种信号,IIC设备地址、IIC存储地址、数据对于Linux来说APP可以通过两类驱动程序访问设备:1、I2C设备自己的驱动程序2、内核自带的i2c-dev.c驱动程序,它是i2c控制器驱动程序暴露给用户空间的驱动程序(i2c-dev.c)对于I2C Device Driver1、I2C设备自己的驱动程序。
2025-10-05 22:05:14
791
原创 Linux学习笔记--虚拟IIC_Adapter驱动模拟EEPROM
创建一个虚拟I2C总线适配器,并在该总线上模拟了一个地址为0x50的EEPROM设备,使用内存缓冲区来模拟EEPROM的读写操作。
2025-10-05 15:40:22
331
原创 Linux学习笔记--insmod 命令
sys/firmware/devicetree/base/... 查找 compatible = "lite-on,ap3216c"2. /proc/devices 中出现字符设备 "253 ap3216c"(假设分配的主设备号是253)/sys/bus/i2c/drivers/ap3216c/ # I2C驱动目录。/sys/class/ap3216c_class/ap3216c/ # 设备类目录。1. /sys/class/ap3216c_class/ 目录被创建。分配模块需要的内存空间。
2025-10-04 22:13:01
342
原创 CMake Error at /opt/ros/noetic/share/catkin/cmake/assert.cmake:20 (message): Assertion failed:
不小心将action文件夹建立在了src文件夹下,导致了最高错误。
2024-10-07 14:43:08
360
转载 Failed to connect to 127.0.0.1 port 8080 after 0 ms: 拒绝连接
Failed to connect to 127.0.0.1 port 1080: Connection refused拒绝连接错误 - AomanHao - 博客园
2024-10-04 22:38:12
343
原创 Linux学习笔记22-主频和时钟配置实验
1、32.768khz的晶振,供给RTC使用,其并不会参与整个系统的时钟里面去2、在6U的T16和T17 这两个I上接了一个24MHZ的晶振。
2024-08-23 18:20:11
460
原创 Linux学习笔记21-按键输入实验
按键KEY0链接到了UART1_CTS引脚上。默认情况下 UART1_CTS为高,当按下KEYO以后UART1 CTS为低。
2024-08-23 17:41:33
387
原创 Linux学习笔记20-蜂鸣器实验
打开底板原理图。S8550是PNP三极管,因此BEEP为低的时候三极管才会导通,为高电平的时候三极管不导通。所以BEEP=O的时候蜂鸣器会叫,当BEEP=1的时候蜂鸣器不会叫。BEEP控制IO为SNVS_TAMPER1。
2024-08-23 12:01:08
511
原创 Linux学习笔记19-BSP工程管理实验
先创建vscode目录,然后打开c/c++配置器,会在vscode目录下生成一个叫做ccpp_propertiesjson 的文件。这个Makefile是一个通用的,之后想添加头文件路径就在INCUDIRS下添加就行,想添加源吗路径就在INCUDIRS下添加就行,还有TARGET哪里要改一下,即目标。2、修改 clk、led、delay 驱动,创建对应的驱动文件,然后放置到对应的目录中。1、新建所需的文件夹,将同一属性的文件放到相应的文件夹中。3、根据编写的新驱动文件,修改main.c文件内容。
2024-08-22 19:05:05
310
原创 Linux学习笔记18-NXP官方SDK使用实验
之前的实验都是自己手动输入外设的结构体,来完成类似于STM32的那种开发方式。但是6ULL的外设很多,手动输入的话就不现实。这就要用到NXP官方提供的SDK包。
2024-08-22 18:03:11
610
原创 Linux学习笔记17-模仿STM32驱动开发实验
RCC_BASE是RCC这个寄存器的基地址,有了基地址就按顺序排放寄存器,比如基地址为0x40000000,那么按顺序的话CR的地址应该是0x40000000,定义的结构体,其每一个变量都是32位。要注意的是:一般寄存器之间都是隔着4个bit,但是CCM_CSCDR3和CCM_CDHIPR之间跳过了一个字节(8bit)。打开VScode,打开3_ledc_stm32文件夹,将工作区另存为到3_ledc_stm32文件夹命名为ledc_sm32,新建start.s,编写Makefile。
2024-08-22 12:45:17
307
原创 Linux学习笔记16-C语言版本LED驱动实验
6ULL开发指南第六章。设置6ULL处于SVC模式下,共有9种模式。通过CPSR寄存器设置,设置GPSR寄存器的bit4-0,也就是M[4:0]为10011=0x13。读写状态寄存器需要用到MRS和MSR指令。MRS将CPSR寄存器书局读取到通用寄存器里面,MSR指令将通过寄存器的值写到CPSR寄存器里面去。
2024-08-21 22:10:51
405
原创 Linux学习笔记15-IMX启动方式
当选择BOOT_MODE0和BOOT_MODE1的时候,我们选择从内部BOOT ROM启动的时候(内部BOOT模式)。如何选择启动设备,通过BOOT_CFG来选择,有BOOT_CFG1、2、4,每个8位。BOOT_CFG4的8根线全部接地,BOOT_CFG2全部接地,除了BOOT_CFG2[3],此位用来选择SD卡启动接口。BOOT_CFG1[0]、[1]、[2]都是固定的,[3]、[4]、[5]、[6]、[7]是可以设置的。从BOOT_CFG设置的外置存储中,读取 image,然后做相应的处理。
2024-08-21 19:28:39
1138
原创 Linux学习笔记14-汇编LED驱动实验
(1)、需要用汇编初始化一些 SOC 外设。(2)、使用汇编初始化DDR,l.MX6U不需要。(3)、设置 sp.指针,一般指向 DDR,设置好 C语言运行环境。
2024-08-21 17:17:17
858
原创 Linux学习笔记13-MX6U-ALPHA开发板简介
电器 属性: IOMUXC_SNVS_SW_对于STM32,管脚名字:PA0-PA15,PB0-PB15.......,每一个管脚都是能复用的,如PA2。NCP出品的,528~900MHz的Cortex-A7内核的MPU。Cortex-A7架构。对于MX6ULL,管脚名字:PAD_BOOT_MODE0,PAD_BOOT_MODE0只能复用未GPIO5_IO10。对于6ULL,查看管脚复用的步骤:“2、找到32章,10复用章节。打开底板原理图,找到LED。3、查找对应的管脚。
2024-08-20 18:46:08
230
原创 Linux学习笔记12-开发环境搭建
要进行裸机开发肯定要先搭建好开发环境,我们在开始学习 STM32 的时候肯定需要安装堆的软件,比如 MDK、IAR、串口调试助手等等,这个就是 STM32 的开发环境搭建。同样的,要想在 Ubuntu 下进行 Cortex-A(LMX6U)开发也需要安装一些软件,也就是网上说的开发环境搭建,环境搭建好以后我们就可以进行开发了。环境搭建分为 Ubuntu 和 Windows,因为我们最熟悉Windows,所以代码编写、查找资料啥的肯定是在 Windows 下进行的。
2024-08-20 17:44:14
947
原创 Linux学习笔记11-shell脚本
我们已经能够熟练的在终端中输入命令来完成一些常用的操作,但是我们都是一条一条输入命令。这样会很麻烦,那么有没有一种方式可以将很多条命令放到一个文件里面,然后直接运行这个文件即可?肯定有,这个就是 shell 脚本!shell 脚本类似windows 的批处理文件shell 脚本就是将连续执行的命令写成一个文件。shell 脚本提供数组循环条件判断的等功能。shell 脚本一般是Linux 运维或者系统管理员要掌握的,作为嵌入式开发人员,只需要掌握 shell 脚本最基础的部分即可。
2024-08-20 12:52:52
753
原创 Linux学习笔记10-LinuxC语言编程
可以使用vim也可以使用,vscode1、 VI 编辑器默认 TAB 键为8 空格,改成4 空格,用vi 打开文件/etc/vim/vimrc,在此文件最后面输入如下代码:set ts=4输入之后按ESC键然后输入:wq2、VIM编辑器显示行号VIM 编辑器默认是不显示行号的,不显示行号不利于代码查看,我们设置 VIM 编辑器显示行号,同样是通过在文件/etc/vim/vimrq 中添加代码来实现,在文件最后面加入下面一行代码:set nu输入之后按ESC键然后输入:wq。
2024-08-20 11:33:18
946
原创 Linux学习笔记8-Linux连接文件
Linux有两种连接文件:符号连接(软连接)和硬链接,符号链接类似Windows下的快捷方式。硬链接通过文件系统的 inode 连接来产生新文件名,而不是产生新文件。inode: 记录文件属性,一个文件一个inode。inode 相当于文件ID,查找文件的时候要先找到inode,然后才能读出文件的内容。
2024-08-19 18:28:13
368
原创 Linux学习笔记7-文件权限管理
一、Ubuntu/Linux 文件权限文件权限是指不同的用户或用户组对某个文件拥有的权限,文件的权限分为三种:r:读w:写x:可执行文件描述形式如下:第一个float是文件的所属用户,第二个float是所属用户组-rw-rw-r一就是文件权限,第一位表示文件类型,剩下的每三位表示一组权限。分别对应拥有者权限、拥有者所在组权限、其他用户权限。除了用字母还可以使用二进制表示文件权限。
2024-08-19 18:00:04
263
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅
2