- 博客(85)
- 资源 (9)
- 收藏
- 关注
原创 Linux 设备树
设备树(Device Tree),将这个词分开就是“设备”和“树”,描述设备树的文件叫做 DTS(DeviceTree Source),这个 DTS 文件采用树形结构描述板级设备,也就是开发板上的设备信息,比如CPU 数量、 内存基地址、 IIC 接口上接了哪些设备、 SPI 接口上接了哪些设备等等,如图所示:树的主干就是系统总线, IIC 控制器、 GPIO 控制器、 SPI 控制器等都是接 到系统主线上的分支。
2024-12-31 17:21:16
128
原创 Linux--新字符设备驱动实验
Linux 字符设备驱动开发的基本步骤,字符设备驱动开发重点是使用 register_chrdev 函数注册字符设备,当不再使用设备的时候就使用unregister_chrdev 函数注销字符设备,驱动模块加载成功以后还需要手动使用 mknod 命令创建设备节点。register_chrdev 和 unregister_chrdev 这两个函数是老版本驱动使用的函数,现在新的字符设备驱动已经不再使用这两个函数,而是使用Linux内核推荐的新字符设备驱动API函数。
2024-12-31 16:05:00
147
原创 嵌入式 Linux LED 驱动开发实验
一、Linux 下 LED 灯驱动原理a)地址映射在编写驱动之前,我们需要先简单了解一下 MMU 这个神器, MMU 全称叫做 MemoryManage Unit,也就是内存管理单元。在老版本的 Linux 中要求处理器必须有 MMU,但是现在Linux 内核已经支持无 MMU 的处理器了。 MMU 主要完成的功能如下:①、完成虚拟空间到物理空间的映射。②、内存保护,设置存储器的访问权限,设置虚拟存储空间的缓冲特性。我们重点来看一下第①点,也就是虚拟空间到物理空间的映射,也叫做地址映射。首
2024-12-31 14:55:21
464
原创 Linux驱动开发--字符设备驱动开发
字符设备是 Linux 驱动中最基本的一类设备驱动,字符设备就是一个一个字节,按照字节流进行读写操作的设备,读写数据是分先后顺序的。比如我们最常见的点灯、按键、 IIC、 SPI,LCD 等等都是字符设备,这些设备的驱动就叫做字符设备驱动。Linux 应用程序对驱动程序的调用如图 所示:在 Linux 中一切皆为文件,驱动加载成功以后会在“/dev”目录下生成一个相应的文件,应用程序通过对这个名为“/dev/xxx” (xxx 是具体的驱动文件名字)的文件进行相应的操作即可实。
2024-12-24 16:21:47
819
原创 IMX芯片启动方式
BOOT 的处理过程是发生在 I.MX6U 芯片上电以后,芯片会根据 BOOT_MODE[1:0]的设置。BOOT_MODE0 引脚,这两个引脚对应这 BOOT_MODE[1:0]。而 I.MX6U 有四个 BOOT 模式,这四个 BOOT 模式由 BOOT_MODE[1:0]来控制,也就是。其中 BOOT_MODE1 和 BOOT_MODE0 在芯片内部是有 100KΩ下拉电阻的,所以默认是。为例,当我们把 BOOT_CFG 的第一个开关拨到“ON”的时候,就相当于 BOOT_MODE1 引脚。
2024-12-23 10:13:28
195
原创 裸机按键输入实验
按键就两个状态:按下或弹起,将按键连接到一个 IO 上,通过读取这个 IO 的值就知道按。面几章我们都是讲解 I.MX6U 的 GPIO 作为输出使用,当 GPIO 连接按键的时候就要做为输入。关于 I.MX6U 的 GPIO 已经在第八章详细的讲解了,本章我们的主要工作就是配置按键。键是按下的还是弹起的。来控制开发板上的蜂鸣器,按一下 KEY0 蜂鸣器打开,再按一下蜂鸣器就关闭。所连接的 IO 为输入功能,然后读取这个 IO 的值来判断按键是否按下。
2024-12-22 19:12:51
62
原创 裸机蜂鸣器实验
来控制三极管 Q1 的导通,当 SNVS_TAMPER1 输出低电平的时候 Q1 导通,相当于蜂鸣器的正。极连接到 DCDC_3V3,蜂鸣器形成一个通路,因此蜂鸣器会鸣叫。通过一个 PNP 型的三极管 8550 来驱动蜂鸣器,通过 SNVS_TAMPER1 这个 IO。输出高电平的时候 Q1 不导通,那么蜂鸣器就没有形成一个通路,因此蜂鸣器也就不会鸣叫。有源蜂鸣器和无源蜂鸣器,这里的有“源”不是电源,而是震荡源,有源蜂鸣器内部带有震荡。来的,需要 2K-5K 的方波去驱动。
2024-12-22 16:58:34
71
原创 I.MX6U 启动方式详解
BOOT_MODE0 引脚,这两个引脚对应这 BOOT_MODE[1:0]。BOOT_MODE[1:0]的值是可以改变的,有两种方式,一种是改写 eFUSE(熔。BOOT 的处理过程是发生在 I.MX6U 芯片上电以后,芯片会根据 BOOT_MODE[1:0]的设置。我们使用的是通过修改 BOOT_MODE[1:0]对应的 GPIO 高低电平。丝),一种是修改相应的 GPIO 高低电平。来选择启动方式,所有的开发板都使用的这种方式, I.MX6U 有一个 BOOT_MODE1 引脚和。
2024-12-20 17:09:27
201
原创 系统移植——文件系统
根文件系统一般也叫做 rootfs,那么什么叫根文件系统?看到“文件系统”这四个字,很多人,包括我第一反应就是 FATFS、 FAT、 EXT4、 YAFFS 和 NTFS 等这样的文件系统。在这里,根文件系统并不是 FATFS 这样的文件系统代码, EXT4 这样的文件系统代码属于 Linux 内核的一部分。Linux 中的根文件系统更像是一个文件夹或者叫做目录(在我看来就是一个文件夹,只不过是特殊的文件夹),在这个目录里面会有很多的子目录。根目录下和子目录中会有很多的文。
2024-12-19 16:11:30
42
原创 系统移植——Linux 内核顶层 Makefile 详解
Linux Kernel网上下载的版本很多NXP等有自己对应的版本。需要从网上直接下载就可以。
2024-12-19 15:56:14
149
原创 系统移植——U-Boot使用实验
Linux 系统要启动就必须需要一个 bootloader 程序,也就说芯片上电以后先运行一段bootloader 程序。这段bootloader程序会先初始化DDR等外设,然后将Linux内核从flash(NAND,NOR FLASH, SD, MMC 等)拷贝到 DDR 中,最后启动 Linux 内核。当然了, bootloader 的实际工作要复杂的多,但是它最主要的工作就是启动 Linux 内核, bootloader 和 Linux 内核的关系。
2024-12-19 15:21:56
41
原创 ARM Cortex-A7 MPCore 架构
Cortex-A7 MPcore 处理器支持 1~4 核,通常是和 Cortex-A15 组成 big.LITTLE 架构的,Cortex-A15 作为大核负责高性能运算,比如玩游戏啥的, Cortex-A7 负责普通应用,因为 CortexA7 省电。Cortex-A7 本身性能也不弱,不要看它叫做 Cortex-A7 但是它可是比 Cortex-A8 性能要强大,而且更省电。
2024-12-16 17:46:37
833
原创 裸机开发概述
裸机开发是了解所使用的 CPU 最直接、最简单的方法,比如本教程使用的 I.MX6U,跟。STM32 一样,裸机开发是直接操作 CPU 的寄存器。Linux 驱动开发最终也是操作的寄存器,但。是在操作寄存器之前要先编写一个符合 Linux 驱动的框架。同样一个点灯驱动,裸机可能只需。要十几行代码,但是 Linux 下的驱动就需要几十行代码。
2024-11-21 13:52:41
65
原创 GCC 编译器,Makefile基础 cmake基础
c: 只编译不链接为可执行文件,编译器将输入的.c 文件编译为.o 的目标文件。-o: 用来指定编译结束以后的输出文件名,如果不使用这个选项的话 GCC 默认编译出来的可执行文件名字为 a.out。-g: 添加调试信息,如果要使用调试工具(如 GDB)的话就必须加入此选项,此选项指示编译的时候生成调试所需的符号信息。-O: 对程序进行优化编译,如果使用此选项的话整个源代码在编译、链接的的时候都会进行优化,这样产生的可执行文件执行效率就高。
2024-11-21 10:48:01
865
原创 C 主要函数解析
SEEK_SET: 文件开头SEEK_CUR: 当前位置SEEK_END:简言之:把stream指针移动到离文件开头100字节处;把stream指针移动到离文件当前位置100字节处;把stream指针退回到离文件结尾100字节处。
2024-10-11 18:14:48
504
原创 C++20主要特性
C++20 极大地丰富了C++语言,提供了更多的现代化编程工具和性能优化,使得C++成为一个更加强大和灵活的编程语言。其他改进: 还包括了其他一些小的语言改进和标准库增强,如对文件系统的支持、数学库的增强等。
2024-10-10 09:18:35
469
原创 QT类 QPushButton
是任何中最常用的控件。按下(点击)按钮来命令计算机执行某个操作。典型的按钮有“确定”、“应用”、“取消”、“关闭”、“是”、“否”和“帮助”。按钮显示文本标签,可以通过在文本中用和号(&)前缀来指定快捷键;还可以选择性地显示一个小图标。
2024-09-29 14:41:48
460
原创 C++ string
C++ 中,std::string 是用于处理字符串的标准库类。它提供了一系列成员函数和操作符,使得字符串的操作更加方便和灵活。
2024-09-27 14:48:27
501
原创 C++ VECTOR
在 C++ 中,是标准库提供的一个容器类,用于存储动态大小的元素序列(即"动态数组")。它提供了一系列成员函数和操作符,使得元素的访问、插入、删除等操作变得方便和高效。数组适用于大小固定且事先知道元素数量的情况下使用,尤其是数据集较小或需要静态分配内存的场景。vector适用于大小可变的情况,特别是需要动态增长或缩小的场景,并且具有更多的功能和灵活性。
2024-09-27 09:11:49
724
原创 Thread
一、thread类一、thread类创建线程使用std::thread类#include <thread> //必须包含<thread>头文件int main()return 0;在传递参数时,是以的,如果要传递一个左值可以使用std::ref和std::crefconst#include <thread> //必须包含<thread>头文件int main()//使用refreturn 0;
2024-09-25 09:51:50
908
原创 去除^M的方法
可惜,经过上面的处理以后,^M是不存在了,但是换行不成功。所有的东西都在一行上面,看着很费劲。确定 ^M是使用 "CTRL-V CTRL-M" 而不是字面上的 ^M。这个正则式将替换所有回车符前的 ^M为空($是为了保证^M出现在行尾)4、一些linux版本有 dos2unix 程序,可以用来祛除^M。输入 :set notextmode。2. 输入 :%s/^M//g。或 :set nobomb。3、vi: 用vi打开文件。
2024-09-25 08:50:17
924
原创 Linux文件系统
ext3 是在 ext2 的基础上发展起来的文件系统,完全兼容 ext2 文件系统,ext3 是一个日志文 件系统,ext3 支持大文件,ext3 文件系统的特点有如下: 高可靠性:使用 ext3 文件系统的话,即使系统非正常关机、发生死机等情况,恢复 ext3 文 件系统也只需要数十秒。ext4 文件系统是在 ext3 上发展起来的,ext4 相比与 ext3 提供了更佳的性能和可靠性,并且 功能更丰富,ext4 向下兼容 ext3 和 ext2,因此可以将 ext2 和 ext3 挂载为 ext4。
2023-08-17 13:59:32
256
原创 常用英文单词
Integrated Circults 集成电路。variable resistor 可变电阻器。voltage Nodes 电压节点。voltage source 电源。capacitor 电容器。diodes 二极管。Logic Gates 逻辑门。resistor 电阻器。inductor 电感器。batteries 电池。BJTs 双极性晶体管。
2023-08-17 13:38:05
343
原创 C++ 深拷贝和浅拷贝
浅拷贝:当编写一个类时,并且没有添加拷贝构造,此时系统会默认添加一个拷贝构造(浅拷贝)。浅拷贝是指:创建一个新对象时,把对象的初始属性都复制一份,若是存在引用类型,则拷贝的是其内存地址,当它的值发生改变时,另一个的值也会受到改变。深拷贝:深拷贝就是将对象从内存中完全拷贝出来,并且重新开辟一片空间来进行存放,当其中一个值发生改变时并不会影响另一个的值,两者互不影响。cout << "析构函数" << endl;cout << "析构函数" << endl;
2023-07-05 15:21:31
187
原创 OPENSSL简介
源码在ssl目录,有客户端(xx_clnt.c)、服务器(xx_srvr.c)、加密实现(xx_enc.c)、记录协议实现(xx_pkt.c)、METHOD方法(xx_meth.c)、双方握手方法(xx_both.c),以及对外函数(xx_lib.c)开源SSL安全工具,包含SSL协议实现,大量软算法(对称/非对称/摘要),非对称算法密钥生成,ASN.1编解码库、证书请求(pscs10) 编解码,数字证书、CRL编解码,OCSP协议,pkcs7标准实现和pkcs12个人数字证书格式实现等功能;
2023-07-05 14:28:02
2729
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人