自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(61)
  • 收藏
  • 关注

原创 移植 U8g2 到 STM32 中

因为我们只调用了u8g2_Setup_ssd1306_i2c_128x64_noname_f()这个函数,所以只保留他用到的函数即可。3、进入Keil5,创建一个U8g2文件夹,把刚刚裁剪的文件放入U8g2中,并且把MyLibrary路径给放入STM32路径中。,多余带有u8x8_d_的文件删除。ssd1306是驱动芯片,128x64是分辨率。这里有个小问题,如果遇到跟我一样的情况,修改这个选项即可。这是笔主裁剪过后的文件,就少了带u8x8_d_的文件。2、去掉多余的驱动文件,只保留。

2023-12-01 07:00:00 1187

原创 Roboflow自动标定数据集

最近需要自己打数据集,记录一下用Roboflow来打标签。(官网)进入官网先注册,注册完成后进入这个界面。我先讲如果不想让数据集公开怎么办,因为这里每个新建的都是公开的。新账号进去应该进去有个私有数据集,是一个关于安全帽的,可以把这个重命名,并且把里面的所有标签全部删除,全部换成自己的。

2024-07-04 07:00:00 262

原创 05_webview操作和使用

红框中的代码是 html 支持 webview。webview 其实是嵌入式一个网页,让我们可以进行修改、操作等。新建一个文件夹,跟之前一样,在 Vscode 终端里输入。首先也是按照之前的方法去创建 js 和 js 文件夹下的。在 index.js 中的。

2024-03-18 07:00:00 213

原创 04_拖动文件渲染在页面中

首先,css 文件一般和 html 结合使用,相当于 html 是结构,而 css 是样式。新建一个文件夹,跟之前一样,在 Vscode 终端里输入。最后在 Vscode 终端输入。就可以开始应用程序啦。

2024-03-14 07:00:00 291

原创 03_渲染进程调用node

我们先创建一个文件夹及文件,并且在 html 引入 JS 文件。

2024-03-13 07:00:00 250

原创 02_electron快速建立项目

下面就是 yarn 安装的代码,在终端输入即可。

2024-03-12 07:00:00 391

原创 01_electron入门

由于毕业论文可能需要用 electron,所以 Linux 驱动学习慢了下来。

2024-03-11 07:00:00 841

原创 24 Linux PWM 驱动

① 16 位的向上、向下自动加载计数器。② 16 位可编程的预分频器。③ 6 个独立的通道,这些通道的功能如下:— 输入捕获(只有通道 5 和 6 支持)。— 输出比较— PWM 波形生成(边缘和中间对齐模式)。— 单脉冲模式。④ 带有死区的可编程互补输出。⑤ 以下事件可以生成中断或者 DMA:— 更新事件,计数器溢出。— 触发事件,计数器开始、停止、初始化等。— 输入捕获。— 输出比较。

2024-03-08 07:00:00 1173

原创 23 Linux INPUT 子系统

INPUT 子系统总体分为三个部分,驱动层、核心层和事件层。简化驱动开发,让代码更加具有可读性。对 input 子系统如何编写代码需要掌握:在使用platform的前提下:① 首先使用 input_allocate_device 来申请一个 input_dev;(一般在 xxx_probe 中)② 初始化 input_dev 事件类型及事件值(三种方式初始化);(一般在 xxx_probe 中)③ 使用 input_register_device 来注册 input_dev;

2024-03-07 07:00:00 1350

原创 22 Linux MISC 驱动

其实 MISC设备驱动就是变成了一种函数集合,这个函数集合包含注册字符设备驱动需要的工作。使用 MISC 设备驱动也简单,首先先设置 MISC 设备结构体包括name、minor(次设备号)和 fops。设置完成后向 Linux 注册 MISC 设备,这个注册函数()一般放在 probe 函数,注销函数()放在 remove 中。

2024-03-06 07:00:00 1088

原创 21 Linux 自带的LED驱动

* 这里其实和上一章节类似,都是这种结构,除了325行是新的之外 */......204 { .compatible = "gpio-leds", }, // 这里得和设备树的LED节点一样才能匹配成功205 {},206 };207......320 .name = "leds-gpio", // 这里设置为leds-gpio,那么/sys/bus/platform/drivers目录下也会出现一个这个名字322 },323 };......

2024-03-05 07:00:00 1160

原创 20.2 设备树中的 platform 驱动编写

这一节是在设备树下使用platform,先是修改了 pinctrl-stm32.c 文件,这个是根据具体的芯片来修改这个的,这里修改了严格模式。之后创建设备的 pinctrl 节点,这里是配置io口和电气设置的。然后在设备树中创建设备节点,这里面需要添加 pinctrl-names 和 pinctrl-0。最后要检查 引脚 pinctrl 的配置和 gpio 占用情况,因为 Linux 下必须严格按照一个引脚对应一个功能设计硬件。

2024-03-02 07:00:00 1029

原创 20.1 platform 设备驱动

驱动分离里有 总线(bus)、驱动(driver)和设备(device)模型。有些 SOC 外设没有总线,所有 Linux 提出了 platform 虚拟总线,相应就有 platform_bus、platform_driver 和 platform_device。这章起始不必太过关注没有设备树部分,关注为什么要有 platform 平台,因为需要把设备和驱动分开,一种更好的框架。

2024-03-01 07:00:00 727

原创 19 异步通知

概念:其实异步通知就是让驱动设备空出来的时候发送一个信号给用户进程空间,让进程空间知道,哦原来可以使用这个设备了,一般搭配 非阻塞+异步通知使用,效果更佳。异步通知的使用方法需要掌握,他们分为驱动和用户进程空间:在内核空间中:① 定义结构体;② 编写fasync函数;③ 最后当设备空出来的时候指定信号。在用户空间中:① 编写信号处理函数,并且最后把信号处理函数传给signal函数;② 本程序进程号告诉内核;/* 获取当前的进程状态 *//* 开启当前进程异步通知功能 */;

2024-02-29 07:00:00 735

原创 18 Linux 阻塞和非阻塞 IO

概念:阻塞和非阻塞,一个是在内核里面,一个是在内核和用户空间反复跳。他们的概念需要知道。阻塞:当一个任务或线程执行某个操作时,如果该操作无法立即完成,任务或线程将会被阻塞(暂停执行)。阻塞式会一直占用 CPU,直到操作完成,这里面有 等待队列头,等待队列项,等待唤醒和等待事件比较重要。非阻塞:当一个任务或线程执行某个操作时,如果该操作无法立即完成,任务或线程不会被阻塞,而是立即返回,继续执行后续的任务或代码。非阻塞式调用不会一直占用 CPU 资源,任务或线程可以在等待操作完成时去处理其他任务或代码。

2024-02-28 07:00:00 1188

原创 17 Linux 中断

概念:首先,我们学习了 Linux 中断号,并且了解了中断是如何开启的。每当使用到了中断,必须去申请中断(request_irq),在驱动出口再释放中断(free_irq),如果使用了函数,那么就不用使用使能中断 (enable_irq)。建议在申请成功后先用函数禁止中断,等所有工作完成之后再来使能中断。其次,学习了上半部和下半部,上半部其实就是对哪些时间敏感、执行速度快的操作放在中断处理函数中,也就是上半部,其他的就放在下半部。

2024-02-27 07:00:00 1193

原创 16 Linux 内核定时器

一般周期性的工作都是用到了定时器,Linux 内核定时器采用系统时钟来实现。Linux 内核定时器只要给出超时时间(定时值)和定时器处理函数。当超时时间到了,设置的定时函数就会执行。需要注意的是,内核定时器不是周期性的,它是运行完就自动关闭,如果想要周期性运行定时器,那么需要在定时处理函数中重新开启定时器。/**//* 定时器超时时间,单位是节拍数 *//* 定时处理函数*/u32 flags;/* 标志位 */#endif。

2024-01-06 07:00:00 1073

原创 15 Linux 按键

其实案件驱动和 LED 驱动很相似,只不过区别在于,一个是读取GPIO高低电平,一个是从GPIO输出高低电平。在驱动程序中使用一个整形变量来表示按键值,应用程序通过 read 函数来读取按键值,判断按键有没有按下。在这里,这个保存按键值的变量就是个共享资源,驱动程序要向其写入按键值,应用程序要读取按键值。所以我们要对其进行保护,对于整形变量而言我们首选的就是原子操作,使用原子操作对变量进行赋值以及读取。

2024-01-05 07:00:00 562

原创 14.1 Linux 并发与竞争

原子操作:不能再进一步分割的操作,一般用于变量或位操作。a = 3;但 C 语言要先编译成汇编语言,ARM 架构不支持直接对寄存器(内存)进行读写操作,要借助寄存器 R0、 R1 等来完成赋值操作。ldr r0, =0X30000000 // 将变量a的地址加载到寄存器r0中ldr r1, = 3 // 写入变量a的值加载到寄存器r1中str r1, [r0] // 将寄存器r1中的值3写入到变量a的地址所指向的内存中。

2024-01-04 07:00:00 791

原创 14.2 并发与竞争实验

这节使用原子操作来实现对 LED 设备的互斥访问,也就是只有一个应用程序能使用 LED。

2024-01-03 07:00:00 1087

原创 12 pinctrl 和 gpio 子系统

gpio 子系统用于初始化 GPIO 并且提供相应的 API 函数,比如设置 GPIO 为输入输出,读取 GPIO 的值等。目的就是方便驱动开发者使用 gpio,驱动开发者在设备树中添加 gpio 相关信息,然后就可以在驱动程序中使用 gpio 子系统提供的 API 函数来操作 GPIO。...

2024-01-02 14:45:00 1275

原创 13 Linux 蜂鸣器

常用蜂鸣器分两种,有源蜂鸣器和无源蜂鸣器。它们俩的区别:有源蜂鸣器具有内置的振荡器和驱动电路,无源蜂鸣器没有;源蜂鸣器只需简单的数字信号来控制,无源蜂鸣器需要外部电路或微控制器来提供特定频率的脉冲信号。在 Linux 下做的工作:①设备树中添加蜂鸣器节点,在蜂鸣器节点中加入 GPIO 信息;②编写驱动程序和测试 APP。

2023-12-22 07:00:00 563

原创 11.2 设备树下的 LED 驱动

最后可以进入 stm32mp1_led 目录中,查看属性文件。

2023-12-21 07:00:00 371

原创 11.1 Linux 设备树

设备树(Device Tree),描述设备树的文件叫做 DTS(DeviceTree Source),这个 DTS 文件采用树形结构描述板级设备,也就是开发板上的设备信息:树的主干就是系统总线, IIC 控制器、 GPIO 控制器、 SPI 控制器等都是接到系统主线上的分支。IIC 控制器有分为 IIC1 和 IIC2 两种,其中 IIC1 上接了 FT5206 和 AT24C02这两个 IIC 设备, IIC2 上只接了 MPU6050 这个设备。

2023-12-19 07:00:00 1187

原创 10 新字符设备驱动文件

因为 register_chrdev 和 unregister_chrdev 两个函数是老版本驱动文件,现在可以用新字符设备驱动 API 函数。

2023-12-17 07:00:00 879

原创 make没有更新最新的uImage

【代码】make没有更新最新的uImage。

2023-12-16 07:00:00 423

原创 9.2 Linux LED 驱动开发

Linux 下的任何驱动,最后都是要配置相应的硬件寄存器。

2023-12-15 07:00:00 902

原创 9.1 字符设备驱动开发

字符设备是 Linux 驱动中最基本的一类设备驱动,字符设备就是一个一个字节,按照字节流进行读写操作的设备,读写数据是分先后顺序的。比如我们最常见的点灯、按键、 IIC、 SPI,LCD 等等都是字符设备,这些设备的驱动就叫做字符设备驱动。Linux 应用程序对驱动程序的调用:驱动加载成功以后会在“/dev”目录下生成一个相应的文件,应用程序通过对这个名为“/dev/xxx” (xxx 是具体的驱动文件名字)的文件进行相应的操作即可实现对硬件的操作。

2023-12-14 07:00:00 938

原创 8 Buildroot 根文件系统构建

根文件系统一般也叫做 rootfs,这个是属于 Linux 内核的一部分。根文件系统首先是一种文件系统,该文件系统不仅具有普通文件系统的存储数据文件的功能,但是相对于普通的文件系统,它的特殊之处在于,它是内核启动时所挂载(mount)的第一个文件系统,内核代码的映像文件保存在根文件系统中,系统引导启动程序会在根文件系统挂载之后从中把一些初始化脚本(如rcS,inittab)和服务加载到内存中去运行。我们要明白文件系统和内核是完全独立的两个部分。

2023-12-13 07:00:00 1361

原创 7 Linux 内核移植

比如板子运行的系统和编译驱动模块所用的系统不一致的时候。打开 arch/arm/boot/dts/Makefile,到“ dtb-$(CONFIG_ARCH_STM32)”配置项,在此配置项中加入“stm32mp157d-atk.dtb”, 表示编译的时候也将 stm32mp157datk.dts 编译为 stm32mp157d-atk.dtb。这里我的理解是:先创建.ext4 磁盘,这个磁盘必须挂在到目录下,把需要放在这个磁盘下的东西放在挂载的目录里,最后再卸载该目录下的挂载。

2023-12-12 07:00:00 2613

原创 6.4 U-boot 移植

这里可以看如何下载uboot源码。

2023-12-11 07:00:00 903

原创 6.3 U-boot 启动流程详解

通过对 uboot 启动流程的梳理,我们就可以掌握一些外设是在哪里被初始化的,这样当我们需要修改这些外设驱动的时候就会心里有数。

2023-12-10 07:00:00 1672

原创 6.2 U-boot 顶层 Makefile

如果要分析uboot源码,首先要将uboot源码进行编译,编译需要在Ubuntu进行,把uboot文件放在一个目录下。编译完成后的文件是这样:我们需要看的文件夹如下。

2023-12-09 07:00:00 1767

原创 6.1 U-boot的使用

由于Ubuntu出现了一些问题,后面都是使用正点原子官方版本。

2023-12-08 07:00:00 878

原创 5 TF-A

TF-A是什么?TF-A 全称是 Arm Trusted Firmware,TF-A是为了保证安全,arm退出的可信固件,简称TF-A。它的作用就是隔离硬件,为硬件提供一个安全环境并提供安全服务。

2023-12-07 07:00:00 1053

原创 4 STM32MP1 Linux系统启动过程

ROM代码是上电以后首先执行的程序,它的主要工作就是读取STM32MP1的BOOT引脚电平,然后根据电平来判断当前启动设备,最后从选定的启动设备里面读取FSBL代码,将FSBL代码放在对应的RAM空间。STM32MP1启动Linux内核是链式结构:ROM Code → FSBL → SSBL → Linux kernel → rootfs,系统启动的时候要保证整个链式结构都是安全的。SSBL部分的Uboot就只有一个使命,启动Linux内核,Uboot将Linux内核加载到DDR上并运行。

2023-12-06 07:00:00 413

原创 3 开发环境搭建

① 开启Ubuntu的FTP服务:;;确保这两行代码没有被注释:之后重启FTP服务:③ FileZilla软件设置:Ubuntu作为FTP服务器,FileZilla作为FTP客户端。FileZilla->文件->站点管理器,创建新站点。由于这时候是乱码,所以先关闭连接,服务器->断开连接。然后按着以下图设置即可。

2023-12-05 07:00:00 973

原创 2.1 Linux C 编程

1、在用户根目录下创建一个C_Program,并在这里面创建3.1文件夹来保存Hellow World程序;2、安装最新版nvim①②③④ 进入neovimcd neovim⑤ 输入下面代码3、安装Nerd Font① 输入② 安装unar,③ 解压文件④之后按照下图操作4、配置nvim.lazy①;②cd nvim进入nvim;③ 输入nvim既可开始安装lazy nvim;5、打出Hellow World6、安装gcc、g++、make① 直接安装 build-essential。

2023-12-04 07:00:00 1540

原创 1.3 Linux文件系统

剩下的 9 位以 3 位为一组,分别表示文件拥有者的权限,文件拥有者所在用户组的权限以及其它用户权限。②用户 luoxuesong 所在的用户组也叫做 luoxuesong ,其组内用户对于文件 test.c 的权限是“rw-”,也是拥有读和写这两种权限。①文件 test.c 的拥有者是用户 luoxuesong ,其对文件 test.c 的权限是“rw-”,也就是对该文件拥有读和写两种权限。“*”,“*.c”就表示 test1 下的所有以“.c”结尾的文件,也就是a.c 和 b.c。

2023-12-03 07:00:00 926

原创 1.2 Ubauntu 使用

双击 VMwareTool打开 Ubuntu 终端快捷键切换汉语的快捷键是安装tool,输入之前设置的密码。地址默认,按Enter即可。出现上图即安装完成。重启以后就可以直接在虚拟机 Ubuntu 系统和主机 Windows 下进行文字、文件等的复制粘贴。如果以上方法不行,使用下面这个方法。首先卸载然后在这个路径下输入安装完毕即可。

2023-12-02 07:00:00 921

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除