
嵌入式
文章平均质量分 89
li星野
这个作者很懒,什么都没留下…
展开
-
驱动:字符设备驱动注册、读写实操
本文介绍了Linux字符设备驱动的开发流程,包括Makefile编写、模块基本结构、设备注册与注销的实现方法。主要内容为:1) 构建模块编译环境,编写包含init/exit函数的驱动框架;2) 实现file_operations结构体并注册字符设备,添加open/release操作;3) 测试驱动安装/卸载流程,处理设备号冲突问题;4) 实现内核自动分配主设备号;5) 通过mknod创建设备节点文件。文章通过具体代码示例演示了从驱动编写到应用程序调用的完整开发过程,重点解决了设备注册注销时的常见问题。原创 2025-06-04 20:43:48 · 503 阅读 · 0 评论 -
驱动: file_operations、register_chrdev、/proc 文件系统概述
Linux字符设备驱动开发核心机制 file_operations结构体是Linux内核驱动开发的关键接口,它定义了用户空间与内核空间文件操作的映射关系。该结构体包含多个函数指针,如open、read、write、ioctl等,驱动开发者通过实现这些回调函数来提供设备功能。一个典型的字符设备驱动实现包括: 注册设备号(alloc_chrdev_region) 初始化cdev结构体(cdev_init)并关联file_operations 实现核心操作函数: open/release:设备打开/关闭时的资源管原创 2025-05-25 19:15:00 · 571 阅读 · 0 评论 -
Linux驱动:基本环境准备
本文介绍了开发板调试模块的完整流程,包括内核源码树准备、开发板启动配置、模块编译测试等关键步骤。主要内容为:1) 准备内核源码树并进行模块编译;2) 通过uboot启动开发板,配置tftp下载内核镜像;3) 设置nfs挂载rootfs文件系统;4) 配置Ubuntu与开发板网络连接;5) 内核配置需开启nfs rootfs支持。文中详细给出了各环节的命令操作和参数设置方法,并提供了相关配置的参考链接,是完整的嵌入式开发环境搭建指南。原创 2025-05-24 16:11:55 · 758 阅读 · 0 评论 -
Linux:面试题
本文概述了操作系统中的关键概念和机制。中断和异常分别由外部设备和CPU内部触发,用于处理紧急事件和错误。用户态和核心态区分了进程和操作系统的运行环境。原创 2025-05-20 22:45:00 · 1163 阅读 · 0 评论 -
Linux驱动:驱动编译流程了解
本文介绍了在开发板中编译Linux内核镜像(zImage)的步骤,并详细说明了内核源码树的配置和编译过程。首先,通过解压内核源码包并配置编译选项,生成了自定义的内核镜像。编译过程中遇到的错误通过重新执行编译命令得以解决。其次,文章详细讲解了常用的内核模块操作命令,包括lsmod、insmod、modinfo和rmmod,并提供了使用modprobe加载和卸载模块的示例。最后,通过一个简单的内核模块示例代码(module_test.c)和对应的Makefile,展示了如何编译和加载自定义内核模块,并将生成的模原创 2025-05-12 23:01:14 · 732 阅读 · 0 评论 -
Linux应用:网络基础
OSI(Open Systems Interconnection)模型即开放式系统互联参考模型,是一个逻辑上的网络通信架构标准。它将网络通信的功能划分为七个层次,从下到上依次为物理层、数据链路层、网络层、传输层、会话层、表示层和应用层。每一层都有其特定的功能和职责,层与层之间相互协作,通过接口进行通信。这种分层结构使得网络通信的设计和理解更加模块化,便于故障排查、技术升级以及不同厂商设备之间的互操作性。例如,物理层负责处理物理介质上的信号传输,如电缆、光纤中的电信号或光信号;原创 2025-04-23 21:21:15 · 646 阅读 · 0 评论 -
Linux应用:线程进阶
信号量(Semaphore)是一个整型的计数器,用于控制对共享资源的访问。它通过 PV 操作来实现同步,P 操作将信号量的值减 1,如果值小于 0 则线程阻塞;V 操作将信号量的值加 1,如果有线程在等待则唤醒一个等待的线程。sem_t属于信号量类型,sem是所定义的信号量变量。sem_wait(&sem):这是信号量的 P 操作,其作用是将信号量的值减 1。若信号量的值为 0,线程会被阻塞,直至信号量的值大于 0。printf(“线程进入临界区\n”);:输出线程进入临界区的信息。原创 2025-03-27 23:19:11 · 965 阅读 · 0 评论 -
Linux应用:线程基础
进程:是程序在操作系统中的一次执行过程,是系统进行资源分配和调度的基本单位。每个进程都有自己独立的地址空间、内存、数据栈以及其他用于维护进程运行的资源。线程:是进程中的一个执行单元,是程序执行的最小单位。线程共享所属进程的资源,如地址空间、打开的文件等,但有自己独立的栈空间和程序计数器等。原创 2025-03-27 22:11:41 · 837 阅读 · 0 评论 -
Linux应用:异步IO、存储映射IO、显存的内存映射
全部刷新实现简单,但效率较低;更新刷新能提高效率,但实现复杂度较高,需要额外的处理来检测变化区域。在实际应用中,要根据具体的需求和场景选择合适的刷新方式。原创 2025-03-24 23:05:51 · 1858 阅读 · 0 评论 -
Linux应用:select、poll
在阻塞 I/O 模型中,当应用程序调用一个 I/O 操作(如读取文件、从网络套接字接收数据等)时,该应用程序会被阻塞,直到 I/O 操作完成。例如,一个进程调用read系统调用从磁盘读取数据,在数据从磁盘传输到内核缓冲区并复制到用户空间之前,进程会一直处于等待状态,无法执行其他任务。这种模型简单直接,但在等待 I/O 完成的期间,进程资源被浪费,无法进行其他有用的工作。。原创 2025-03-24 22:57:34 · 804 阅读 · 0 评论 -
Linux应用:Linux的信号
捕获信号并自定义处理:进程可以定义一个信号处理函数,当接收到特定信号时,内核会调用该函数,进程在函数中可以执行自定义的操作。首先需要定义信号处理函数,int fd;int* ptr;if (fd!if (ptr!exit(0);return 0;stdio.h:提供标准输入输出库函数,如 printf 用于输出信息。原创 2025-03-20 23:32:02 · 1066 阅读 · 0 评论 -
Linux应用:进程间通信
SystemV IPC 是 UNIX System V 操作系统中引入的一组进程间通信机制,包括消息队列、共享内存和信号量。这些机制在 Linux 系统中也得到了广泛应用。。原创 2025-03-20 22:59:47 · 942 阅读 · 0 评论 -
Linux应用:程序运行
kill命令的这种用法是向指定的进程发送特定信号编号的信号。信号在操作系统中是一种软件中断机制,用于通知进程发生了某种特定事件或要求进程执行特定操作。。原创 2025-03-17 23:13:07 · 627 阅读 · 0 评论 -
Linux应用:进程详解
程守护进程是一种在后台运行且不受终端控制的进程。它具有以下特点:生存期长:从系统启动开始运行,一直持续到系统关闭,期间持续提供特定服务。脱离控制终端:守护进程启动后,与创建它的终端脱离关系,即使终端关闭,它也能继续运行。运行在特定会话和进程组:通常会创建自己独立的会话和进程组,避免受到其他进程的干扰。。原创 2025-03-16 20:51:49 · 612 阅读 · 0 评论 -
Linux应用:进程的回收
waitpid函数也是用于等待子进程结束的系统调用,它比wait函数更加灵活。waitpid可以指定等待特定 PID 的子进程,也可以设置非阻塞等待模式或者阻塞模式。通过waitpid,父进程可以更精确地控制对子进程的等待和资源回收操作,例如可以在不阻塞父进程的情况下,定期检查子进程是否结束。pid_t pid;int status;// 创建子进程// 处理 fork 失败的情况return 1;// 子进程代码printf("子进程开始执行,PID: %d\n", getpid());原创 2025-03-14 21:14:30 · 637 阅读 · 0 评论 -
Linux应用:PCB、fork
子进程是由另一个进程(父进程)通过fork或其他类似机制创建的新进程。子进程继承了父进程的许多属性,如用户 ID、组 ID、环境变量、文件描述符等,但它有自己独立的 PID 和内存空间,与父进程并发执行,在一定程度上可以看作是一个独立的程序在运行。原创 2025-03-13 21:32:55 · 907 阅读 · 0 评论 -
linux应用:进程前章
操作系统加载程序:当用户在命令行输入程序的可执行文件名或者通过图形界面点击应用程序图标时,操作系统的加载器(loader)开始工作。加载器会在磁盘上找到对应的可执行文件,该文件遵循特定的格式,如 ELF(Executable and Linkable Format,用于 Linux 系统)。加载器将可执行文件中的代码和数据加载到内存中,并设置好运行环境,包括初始化栈(stack)等。。原创 2025-03-12 22:13:42 · 893 阅读 · 0 评论 -
linux应用:随机数、proc
proc是一个虚拟文件系统,它提供了一种内核与用户空间交互的方式,通过文件和目录的形式展示内核对象的信息,包括进程信息、系统状态、硬件设备信息等。它并不占用实际的磁盘空间,而是在内存中动态生成。当访问/proc下的文件时,内核会实时生成相应的信息并返回给用户空间程序。与时间相关的 proc 文件。原创 2025-03-12 19:52:52 · 854 阅读 · 0 评论 -
Linux应用:时间API
在 Linux 内核中,jiffies 是一个非常重要的全局变量,它记录了系统启动以来产生的时钟中断次数。每发生一次时钟中断,jiffies 的值就会增加 1。时钟中断是由硬件定时器产生的,其频率在系统编译时就已经确定,通过HZ宏来表示,单位是赫兹(Hz)。例如,如果HZ的值为 1000,那就意味着系统每秒会产生 1000 次时钟中断,jiffies 每秒也会增加 1000。jiffies 的类型通常是unsigned long,这使得它能够表示一个非常大的计数值,即使系统运行很长时间也不会溢出。原创 2025-03-11 20:58:19 · 1069 阅读 · 0 评论 -
linux应用:静态文件、 inode(i 节点)、vnode、流
inode(index node,索引节点)是 Unix/Linux 文件系统中的一种数据结构,用于存储文件的元数据信息,每个文件和目录在文件系统中都有一个对应的 inode。inode 是文件系统管理文件的核心,它记录了文件的各种属性和数据块的存储位置等信息。原创 2025-03-10 21:12:01 · 1199 阅读 · 0 评论 -
Linux应用:文件属性
umask 是 Linux 系统中用于控制新创建文件和目录默认权限的掩码。它决定了在创建文件或目录时,从默认权限中去除哪些权限位。umask 的值是一个八进制数,与文件和目录的权限位相对应。umask 的工作机制当用户创建一个文件或目录时,系统会先根据默认的权限模式(文件通常是 666,目录通常是 777),然后与 umask 进行按位取反的 “与” 操作,得到最终的实际权限。例如,umask 的值为 022,对于文件来说:默认权限 666(八进制)转换为二进制是 110 110 110。原创 2025-03-09 21:27:02 · 975 阅读 · 0 评论 -
linux应用:文件描述符、lseek
fcntl函数是一个功能强大的文件控制函数,它可以对已打开的文件描述符进行各种操作,包括复制文件描述符、改变文件状态标志、设置和获取文件的访问控制权限等。fd:需要操作的文件描述符。cmd:指定要执行的操作命令,常见的命令如下:F_DUPFD:复制文件描述符fd,返回一个新的文件描述符,新描述符是当前进程中未使用的最小整数值。与dup函数类似,但fcntl通过F_DUPFD提供了更多控制选项。close(fd);// 现在fd和new_fd都指向同一个文件close(fd);原创 2025-03-06 22:07:59 · 1034 阅读 · 0 评论 -
linux应用:errno、perror、open、fopen
errno 是一个全局变量,定义在 头文件中。当系统调用(如 open、read、write 等)或库函数执行失败时,会将一个错误码赋值给 errno。不同的错误码代表不同的错误类型,通过检查 errno 的值,可以判断具体发生了什么错误。代码中使用 open 函数尝试打开一个不存在的文件。由于文件不存在,open 函数会执行失败并返回 -1。当 open 函数返回 -1 时,通过检查 errno 的值来判断具体的错误类型。ENOENT 是一个预定义的错误码,表示文件或目录不存在。原创 2025-03-04 23:19:26 · 778 阅读 · 0 评论 -
linux应用:文件IO
文件描述符(File Descriptor)是在 Linux 等操作系统中用于标识已打开文件的整数。它是操作系统内核为了管理文件而分配给每个打开文件的一个唯一标识符静态文件是指内容固定不变的文件,在服务器上以固定的格式存储,每次被请求时,服务器直接将其内容发送给客户端,不经过任何动态处理。动态文件是指内容根据不同的条件和请求而动态生成的文件。服务器在接收到客户端请求时,会根据请求的参数、用户的状态、数据库中的数据等因素,通过执行相应的程序或脚本动态生成文件内容,然后发送给客户端。O_RDONLY。原创 2025-03-03 19:37:41 · 571 阅读 · 0 评论 -
Windows上开发运行EtherCAT主站的几种方案 有哪些?
EtherCAT 是一种高性能、高可靠性、高同步性的工业以太网协议,其独特的数据处理方式、灵活的拓扑结构和分布式时钟同步功能使其在工业自动化和运动控制等领域具有显著优势,为现代工业的自动化和智能化提供了强大的通信基础。它推动了工业控制系统的高速化、精确化和智能化发展,是当前工业 4.0 时代中工业通信领域的重要技术之一。在 Windows 上开发运行 EtherCAT 主站时,可以根据项目的需求、预算和开发人员的技术水平选择不同的方案。原创 2025-01-03 19:22:44 · 1854 阅读 · 0 评论 -
uboot:源码分析-启动第二阶段-一个函数组成uboot第二阶段
(1)start_armboot这个函数在uboot/lib_arm/board.c的第444行开始到908行结束。(2)450行还不是全部,因为里面还调用了别的函数。(3)为什么这么长的函数,怎么不分成两三个函数?主要因为这个函数整个构成了uboot启动的第二阶段。原创 2024-09-25 20:45:00 · 2007 阅读 · 0 评论 -
uboot:源码分析-启动第一阶段-虚拟地址和物理地址基础
(1)构建异常向量表(2)设置CPU为SVC模式(3)关看门狗(4)开发板供电置锁(5)时钟初始化(6)DDR初始化(7)串口初始化并打印"OK"(8)重定位(9)建立映射表并开启MMU(10)跳转到第二阶段学习记录,侵权联系删除。来源:朱老师物联网大课堂。原创 2024-09-24 20:43:15 · 715 阅读 · 0 评论 -
uboot:源码分析-启动第一阶段-lowlevel_init
检查复位状态、IO恢复、关看门狗、开发板供电锁存、时钟初始化、DDR初始化、串口初始化并打印’O’、tzpc初始化、打印’K’。其中值得关注的:关看门狗、开发板供电锁存、时钟初始化、DDR初始化、打印"OK"原创 2024-09-21 19:15:00 · 1333 阅读 · 0 评论 -
uboot:源码分析-启动第一阶段-start.S解析
进入start.S文件中,发现57行中就是_start标号的定义处。原创 2024-09-20 21:13:34 · 1291 阅读 · 0 评论 -
uboot:主Makefile分析
uboot的配置和编译过程的配合。编译的时候需要ARCH=arm、CPU=xx等这些变量来指导编译,配置的时候就是为编译阶段提供这些变量原创 2024-09-18 22:29:09 · 1357 阅读 · 0 评论 -
uboot:文件、目录分析
(1)api. 硬件无关的功能函数的API。uboot移植时基本不用管,这些函数是uboot本身使用的。(2)api_examples. API相关的测试事例代码。(3)board。board是板的意思,板就是开发板。board文件夹下每一个文件都代表一个开发板,这个文件夹下面放的文件就是用来描述这一个开发板的信息的。board目录下有多少个文件夹,就表示当前这个uboot已经被移植到多少个开发板上了(当前的uboot支持多少个开发板)。原创 2024-09-04 19:45:00 · 749 阅读 · 0 评论 -
uboot:配置编译
在嵌入式系统中,BSP(Board Support Package)被称为板级支持包或板级支持软件。它是一组针对特定硬件平台的软件支持包,为开发人员提供了一个统一的接口层,简化了硬件和软件之间的交互。BSP的主要功能和特点如下:BSP的主要功能设备初始化和配置:BSP负责初始化硬件设备,并进行必要的配置,使操作系统能够正确地与硬件交互。驱动程序支持:BSP提供与硬件设备交互的驱动程序,使操作系统能够访问和控制硬件功能。原创 2024-09-07 21:00:00 · 914 阅读 · 0 评论 -
uboot:常用环境变量
环境变量如何参与程序运行(1)环境变量有2份,一份在Flash中,另一份在DDR中。uboot开机时一次性从Flash中读取全部环境变量到DDR中作为环境变量的初始化值,然后使用过程中都是用DDR中这一份,用户可以用saveenv指令将DDR中的环境变量重新写入Flash中去更新Flash中环境变量。下次开机时又会从Flash中再读一次。(2)环境变量在uboot中是用字符串表示的,也就是说uboot是按照字符匹配的方式来区分各个环境变量的。因此用的时候一定要注意不要打错字了。原创 2024-09-05 23:30:00 · 808 阅读 · 0 评论 -
boot:常用命令
(1)行缓冲的意思就是:当我们向终端命令行输入命令的时候,这些命令没有立即被系统识别,而是被缓冲到一个缓存区(也就是系统认为我们还没有输入完),当我们按下回车键(换行)后系统就认为我们输入完了,然后将缓冲区中所有刚才输入的作为命令拿去分析处理。(2)linux终端设计有3种缓冲机制:无缓冲、行缓冲、全缓冲命令中的特殊符号(譬如单引号)原创 2024-09-06 23:30:00 · 1867 阅读 · 0 评论 -
uboot:uboot了解
uboot从哪里来的?(1)uboot是SourceForge上的开源项目(2)uboot项目的作者:一个德国人最早发起的项目(3)uboot就是由一个人发起,然后由整个网络上所有感兴趣的人共同维护发展而来的一个bootloader。uboot的发展历程(1)自己使用的小开源项目。(2)被更多人认可使用(3)被SoC厂商默认支持。总结:uboot经过多年发展,已经成为事实上的业内bootloader标准。现在大部分的嵌入式设备都会默认使用uboot来做为bootloader。原创 2024-09-03 22:30:00 · 1639 阅读 · 0 评论 -
驱动:linux驱动了解
理解驱动的概念(1)驱动一词的字面意思,车动起来了(2)物理上的驱动(3)硬件中的驱动,电脑适配器(4)linux内核驱动。软件层面的驱动广义上就是指:这一段代码操作了硬件去动,所以这一段代码就叫硬件的驱动程序。(本质上是电力提供了动力,而驱动程序提供了操作逻辑方法)狭义上驱动程序就是专指操作系统中用来操控硬件的逻辑方法部分代码。linux体系架构(1)分层思想(2)驱动的上面是系统调用API(3)驱动的下面是硬件(4)驱动自己本身也是分层的。原创 2024-09-02 22:00:00 · 457 阅读 · 0 评论 -
shell了解和问答机制
Shell 是一种命令行界面(CLI),它允许用户与操作系统(如 Linux 或 Unix)进行交互。Shell 充当了用户与操作系统内核之间的桥梁,接收用户输入的命令,并将其转换为内核能理解的形式执行。执行完毕后,Shell 会将结果返回给用户。简单来说,Shell 是用户与操作系统之间的接口。Shell 的功能非常强大,它不仅可以执行系统命令,还可以编写复杂的脚本,以自动化执行一系列的任务。原创 2024-09-01 22:15:00 · 1621 阅读 · 0 评论 -
裸机:LCD
LCD,全称为Liquid Crystal Display,即液晶显示屏,是一种利用液晶物质的光学特性,通过控制电场来改变光的透过性,从而实现图像显示的技术。以下是关于LCD的详细解释:1.功耗低:由于LCD采用液晶分子作为显示元件,其功耗远低于传统的CRT显示器。2.体积小、重量轻:LCD具有平面超薄的特点,可以大大节省空间,便于携带和安装。3.辐射低:LCD在工作时不会产生电磁辐射,对人体健康无害。4.色彩丰富、显示效果好:随着技术的进步,LCD的色彩表现和显示效果已经达到了非常高的水平,可以满足原创 2024-08-31 23:30:00 · 2889 阅读 · 0 评论 -
裸机:触摸屏TouchScreen
理解原理,主要还是关注接口方式,具体使用时参考代码!原创 2024-08-30 22:15:00 · 908 阅读 · 0 评论 -
裸机:SD卡启动详解
硬盘:硬盘是计算机中最常用的外存设备之一,分为机械硬盘(HDD)和固态硬盘(SSD)两种。机械硬盘(HDD):由涂有磁性材料的铝合金原盘组成,通过磁头在盘片上读写数据。其优点是容量大、价格相对较低,但读写速度相对较慢,且抗震性较差。固态硬盘(SSD):以闪存为存储介质,通过电学原理存储数据。相比机械硬盘,固态硬盘具有读写速度快、延迟低、抗震性好等优势,但价格相对较高。随着技术的发展,固态硬盘的出货量在全球硬盘市场上占比不断提高。软盘:虽然现已较少使用,但软盘曾是重要的外存设备。原创 2024-08-29 21:15:00 · 1262 阅读 · 0 评论