- 博客(52)
- 收藏
- 关注
原创 【Win11+Ubuntu双系统安装】
本文详细介绍了在联想Y7000P笔记本上安装Ubuntu 24系统的完整步骤。首先需要检查电脑配置(UEFI模式和GPT分区),然后通过压缩卷为Ubuntu分配至少200G空间。接着使用Ventoy工具制作Ubuntu安装U盘,推荐下载24版本以避免WiFi驱动问题。安装过程中特别强调要当场连接WiFi。文章提供了从Windows系统准备到Ubuntu安装的全流程指导,包括分区设置、启动盘制作和系统安装等关键步骤,并给出了华为云镜像下载地址和相关参考链接。
2025-12-11 17:14:07
346
原创 【mqtt/移植openssl和paho库/hcsr04传感器驱动】
是指 MQTT 代理(Broker)在断电、重启或网络中断后,仍能保存必要的消息与订阅信息,以确保通信的连续性与可靠性。换句话说,就是让 MQTT “记得”上一次的状态。
2025-10-13 19:57:10
545
原创 【gdb/sqlite3移植/mqtt】
如果应用层有发布消息(Publish / Subscribe),就不需要额外发心跳,因为数据包本身也会刷新计时。进入代码mylvgl目录里, 执行gdbserver :2000 ./demo。进入__install目录下,出现新的目录bin include等等。将gdbserver文件拷贝到 ~/nfs/rootfs/bin目录下。进到开发板终端中,进入/bin目录,有gdbserver。payload可选,不能太长,三个总体不超过64k。2个字节的固定头,数据长度变化的可变头,
2025-10-10 21:01:34
2042
原创 【framebuffer】
等设备节点中提供接口,使用户空间可以通过 mmap 直接访问显存。是 Linux 提供的一种将图像数据直接输出到显示设备的机制。系统调用可获取分辨率、像素格式等信息。
2025-10-08 21:23:50
782
原创 【线程邮箱】
是一种用于在线程之间。本质上是一个。线程 A 发送消息到邮箱,线程 B 从邮箱接收消息。邮箱提供:若邮箱为空,接收线程可阻塞等待;若满,发送线程可阻塞等待。
2025-10-08 21:07:36
688
原创 【linux内核驱动day06-I2C】
明白I2C的从机地址是怎么设,怎么看硬件手册,open,write,read寄存器。,用于连接主控(如 SoC)与多个外设(如传感器、EEPROM 等)。设置从机地址ioctl(fd,I2C_SLAVE,0x48)在驱动里open,write,read,设备驱动。(Serial Clock Line):时钟线。(Serial Data Line):数据线。1、 I2C从应用层操作I2C的驱动。2、基于I2C总线写自己的I2C驱动。在应用层,只打开驱动,就有输出。:发起通信、产生时钟。
2025-10-08 20:44:47
247
原创 【linux内核驱动day05】
uboot设置自动启动:在设置之前先保存之前的bootcmd_cp,再设置设置完成后怎么打开:可以重启,也可以使用命令。
2025-10-08 20:26:02
298
原创 【linux内核驱动day04】
拷贝:修改:make:将pute.dtb拷贝到tftpboot目录下:sudo minicom中tftp三部曲:在/arm/boot/dts/pute.dts文件里:先定义reg中的数字类型,地址1,大小1的格式。
2025-09-28 22:13:21
548
原创 【linux内核驱动day02】
回到开发板终端里检查nfs挂载,检查开发板地址,检查nfs的配置文件:sudo vim /etc/exports,是否与uboot中的bootargs里的目录一致。新增一行:obj-S(CONFIG DEMO)+=demo.o修改同层目录下的Kconfig。1.在drivers/char目录(在顶层目录下)下新建并编辑demo.c。Kconfig 和Makefile都是成对出现,每层目录都有。再拷贝zImage和.dtb文件到tftpboot目录下。以向drivers/char目录下新加demo.c为例。
2025-09-24 21:15:17
446
原创 【linux内核驱动day01】
解压命令:tar -xvf rootfs.tar.bz2 -C rootfs。uboot阶段的ping 是单向的,只能在uboot中Ping虚拟机,不能在虚拟机中ping uboot。使用 arm-linux-gnueabihf-gcc 编译出来的 是给开发板(ARM)运行的。在虚拟机的rootfs目录下,写一个main.c文件,打印hello world。uboot存在于SD卡,tftp下载zlmage,nfs挂载rootfs。uboot命令:(uboot启动倒计时为0前按回车进入uboot命令行)
2025-09-23 23:34:58
951
原创 【ARM-day06-KEY实验-中断】
接了一个 10K 的上拉电阻,因此 KEY0 没有按下的时候UART1_CTS 应该是高电平,当 KEY0按下以后 UART1_CTS 就是低电平。GPIO1_ICR2寄存器:bit4 和5置1,代码是GPIO1_ICR2 |= (3 << 4)GPIO1_IMR寄存器:bit18置1使能,代码是GPIO1_IMR |= (1 << 18)电气特性寄存器:IOMUXC_SW_PAD_CTL_PAD_UART1_CTS_B。复用寄存器:IOMUXC_SW_MUX_CTL_PAD_UART1_CTS_B。
2025-09-15 20:21:37
189
原创 【ARM-day05-led实验】
IOMUXC寄存器地址表-----参考手册1542页MUX复用功能PAD电器特性I.MX6ULL: 管脚名字:PAD BOOT MODE0,管脚的复用功能:IOMUXC SNVS SW MUX CTL PAD BOOT MODEO.对于 6ULL,查看管脚复用的步骤:1、打开参考手册。2、找到 32 章,10 复用章节,3、查找对应的管脚。1、需要用汇编初始化一些 SOC 外设。2、使用汇编初始化 DDR,I.MX6U 不需要。
2025-09-12 09:18:42
727
原创 【ARM-day04-led灯实验】
编译器负责把人写的源代码翻译成计算机能理解的目标代码。作用:把源文件start.S(汇编源程序)编译成目标文件start.o。结果:得到的start.o是机器可读的目标代码,还不能直接运行。
2025-09-11 09:29:16
1036
原创 【ARMday02】
MOV{S}<c> <Rd>, #<const>MOV{S}<c> <Rd>, <Rm>MOV instruction Canonical form移位量来自寄存器Rslsl:逻辑左移:低位补0,高位丢弃(相当于乘以2)lsr:逻辑右移:高位补0,低位丢弃(相当于除以2)ror:循环右移,移出的位从左边绕回asr:算数右移:往右补符号位,常用于有符号数除以2ADD{S}<c> <Rd>, <Rn>, <operand2>:目的寄存器(结果放哪)。:第一个操作数(通常是寄存器)。:第二操作数(可
2025-09-08 21:35:25
1055
原创 【ARM基础知道】
MMU:(memory management unit)内存管理单元,硬件上有这个才能上操作系统。操作系统虚拟出来的一段进程空间,通过MMU映射到实际的物理地址上。在裸机上开发,需要关闭MMU。不能通过c语言来关闭,有一套流程。嵌入式:以应用为中心,以计算机技术为基础,软硬件可裁剪的专用计算机系统。计算机硬件组成:运算器、控制器、存储器、输入设备、输出设备。根据用户需求(功耗、体积、可靠性)去裁剪硬件。正点原子IMAX6ULL开发板,
2025-09-08 00:00:47
1058
原创 【单片机day04】
数字温度传感器:实现简单,不需要额外转换电路,采集过来的就是数字温度值模拟温度传感器 -> 热敏电阻 -> AD转换电路 -> 数字值GPIO单总线:测量范围: -55℃ - 125℃精度: ±0.5℃GPIO接口:I2C接口:SCL、SDA、VCC、GNDSPI接口:SCLK、CS、MOSI、MISOADC接口:板子ADC进行模数转换UART接口:GPS上拉电阻:使引脚在空闲状态下,处于高电平复位信号: 51单片机复位,问ds18b20在不在。
2025-09-05 15:07:37
253
原创 【单片机day03】
通用异步收发器,2个串口(1个串口被用于ISP下载程序,1个串口被用于和主机之间的通信)全双工(两根线TX、RX)、串行、异步。
2025-09-04 22:32:14
1784
原创 【学习嵌入式day-29-网络】
ping www.baidu.cm 查看百度的ip地址。在linux系统上,SOCK_STREAM只有TCP协议。我们需要干的事情:基于网络现有的功能,实现网络程序编写。@ sddlen 说明第二个参数的地址类型的大小。ifconfig 虚拟机里的ip地址。主机和网络分别有几层,每一层分别做了什么事情。主机号位1是默认网关(最后一位数字)TCP4层模型和5层模型有什么区别。ip地址的本质:32位的数值。一个ipv4的的ip地址,4层把下面两层合在一起,
2025-08-21 21:56:37
285
原创 【学习嵌入式day-28-消息队列/共享内存】
本文介绍了三种Linux进程间通信(IPC)的实现方式: 有名管道:通过创建两个管道文件实现双向通信,每个进程使用不同线程处理读写操作,输入".quit"可退出聊天。 消息队列:使用msgget创建队列,通过设置不同消息类型(100L和200L)实现双向通信,包含消息发送和接收功能。 共享内存+信号灯:最高效的通信方式,使用shmget创建共享内存,配合信号灯(semop)实现同步控制,包含读写进程示例代码。 三种方法各有特点:管道适合简单通信,消息队列支持类型区分,共享内存效率最高但需
2025-08-20 09:36:01
616
原创 【学习嵌入式-day-27-进程间通信】
本文介绍了进程间通信和线程同步的两种实现方式。首先展示了使用信号量控制三个线程循环打印ABC的代码示例,通过信号量机制确保线程执行的顺序。然后详细讲解了进程间通信的概念和常见方法,包括管道(有名/无名)、信号、消息队列等。重点分析了无名管道的特点和操作原理,并提供了父子进程通过管道通信的代码实现。最后介绍了信号的概念、处理方式(默认/忽略/捕捉)以及相关函数接口(signal/alarm/kill),并通过示例代码演示了信号的捕获和处理机制。
2025-08-18 20:41:30
559
原创 【学习嵌入式day-26-线程间通信】
摘要: 本文包含三个主要部分:1) 文件遍历程序,实现在指定目录下查找特定扩展名文件(如.mp3/.mp4等)的功能;2) 多线程编程示例,创建四个不同功能的线程(采集、存储、显示、日志)并演示线程属性设置;3) 线程同步机制,包括互斥锁和信号量的使用,以及如何避免死锁情况。代码展示了Linux系统编程中常见的目录操作、线程创建与管理、线程间通信等关键技术,并提供了详细的函数接口说明和实现示例。
2025-08-16 18:02:33
984
原创 【学习嵌入式day-25-线程】
摘要:本文介绍了Linux系统编程中的进程与线程相关技术。主要内容包括:1) exec函数族的使用方法,用于在当前进程空间执行另一程序;2) 主函数参数传递的实现方式;3) system函数和进程创建的应用;4) 线程概念及其与进程的区别,包括内存空间管理差异;5) 多线程编程接口如pthread_create、pthread_join等的使用示例。文章通过代码示例演示了线程创建、执行和回收的全过程,并对比分析了多进程与多线程的优缺点。
2025-08-15 20:55:15
363
原创 【学习嵌入式day-24-进程】
本文摘要包含两个主要部分:1) 一个C语言实现的字典查询程序,通过读取文件查找用户输入的单词释义;2) Linux进程管理的相关知识。第一部分展示了如何用fgets和strtok处理文件输入,实现单词查询功能。第二部分详细介绍了进程概念、内存空间布局、进程调度算法、进程状态及常用命令,重点讲解了fork创建子进程、进程回收机制(wait/waitpid)以及僵尸进程/孤儿进程问题。程序示例演示了父子进程创建、进程同步和进程回收的具体实现方法,包括获取进程ID、处理子进程退出状态等关键操作。
2025-08-15 13:33:36
586
原创 【学习嵌入式day23-Linux编程-文件IO】
本文介绍了文件IO和标准IO的相关操作。主要内容包括:1. 使用fgets和fputs实现文件拷贝功能;2. 二进制文件的读写操作(fread/fwrite);3. 文件定位函数(fseek/ftell/rewind);4. 文件IO系统调用(open/read/write/lseek);5. 目录操作(opendir/readdir)及递归遍历实现;6. 时间处理函数(time/localtime/mktime/ctime)。文章通过具体代码示例演示了这些功能的实现方法,包括文件拷贝、二进制数据处理、目录
2025-08-13 20:54:12
681
原创 【学习嵌入式day-19-数据结构-栈和队列】
申请存放标签的空间申请存放数据的空间//创建栈//申请标签空间//申请存放数据的空间}linknode;//存放数据的类型//队列类型//存放数据空间的首地址int head;//头下标int tail;//尾下标int tlen;//最多存放元素个数}seqqueue;}linknode;
2025-08-06 19:23:35
241
原创 【学习嵌入式day-17-数据结构-单向链表/双向链表】
/存放数据的类型//存放数据//指向前一个节点的指针//指向后一个节点的指针}linknode;
2025-08-05 20:11:32
1144
原创 【学习嵌入式day16-数据结构】
一个链表就是节点,一个节点分为一个数据域和地址域* 链表存放数据的类型 *//* 链表节点类型 *///存放数据空间//存放下一个节点地址}linknode。
2025-08-03 16:43:56
752
原创 【学习嵌入式day-14-C语言-结构体数组/共用体/枚举/内存管理】
传参的时候用枚举常量均为int类型,且第一个枚举常量的值默认为0,后续枚举常量的值总是前一个常量的值+1相当于定义了一个个的宏枚举常量可以被赋值,后续的变量+1。
2025-08-03 16:32:53
414
原创 【学习嵌入式day-13-C语言-数组指针、结构体】
本文摘要:文章介绍了C语言中字符串转整型的atoi函数用法,二维数组指针传参的方法(包括整型和字符型),void*指针的特性、转换规则及其应用场景。详细讲解了结构体类型的定义、初始化、成员访问(.和->操作符)、内存对齐规则及传参方式(建议使用地址传递)。内容涵盖指针操作、数据类型转换和结构体使用等核心编程概念。
2025-07-29 22:03:39
167
原创 【学习嵌入式day-12-C语言-数组指针和指针数组】
本文主要讲解了C语言中指针的高级应用,包括字符串操作函数实现(mystrlen/mystrcmp/mystrcat/mystrcpy/mystrswap)、函数指针、二级指针、指针数组和数组指针等概念。重点阐述了指针数组与数组指针的区别,并详细说明了它们在操作字符串和二维数组时的应用场景。文章还涉及指针的类型转换规则、指针运算以及通过指针实现字符串排序的方法,为理解C语言指针提供了全面的技术指导。
2025-07-28 20:44:22
871
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅