Linux
文章平均质量分 63
笨笨D幸福
一个因好奇而误入地球的太阳系生物
展开
-
slint ui学习笔记
slint是一个类似qml的标记语言(xml/css之类方便界面设计的语言),经过编译器slint compile(类似QT的moc/uic/rcc工具)可完整的转换成Cpp或者Rust。其开发方式类似qml+cpp,这得益于slint ui的两位初始创建人来自QT团队。slint 优点。原创 2023-11-15 16:12:04 · 960 阅读 · 0 评论 -
Linux文件系统学习-总体概览
Linux文件系统的详细说明原创 2022-12-06 22:18:36 · 101 阅读 · 0 评论 -
Linux Shell相关记笔记
代码】Linux Shell相关记笔记。原创 2022-08-09 13:55:15 · 274 阅读 · 0 评论 -
11. Linux驱动 - Rust编写Linux驱动
Linux 中设备通常被分为三类,每个驱动模块通常实现为这三类中的其中一种:字符设备。通常是指可以当作一个字节流来存取的设备(比如文件)。块设备。通常是可以驻有文件系统的设备(比如磁盘),和字符设备类似,但块设备有一个请求缓冲区,因此它们可以选择响应请求的最佳顺序。网络设备。通常是指能与其他主机交换数据的设备。我们以编写一个简单的字符设备驱动为例,展示如何用 Rust 来编写内核驱动。R4L 开发环境准备为了方便,我们把 Rust for Linux 简称为 R4L。首先,下载 Rust原创 2022-07-18 08:34:40 · 2444 阅读 · 0 评论 -
10. Linux驱动 - Ubuntu驱动签名
在一般得嵌入式Linux中,默认驱动签名是不打开的,所以驱动程序编写完成后,直接 就可以使用了。但是在Ubuntu等成品系统中,因为安全和引导问题,大多是开启的,所以所有的驱动都要经过签名才能使用。内核从3.7后开始支持模块签名,这个功能使能以后,内核只允许安装特定key签名的模块。在安全启动模式下,是不能加载未签名或由未注册的密钥签名的内核模块的。内核在编译的时候,启动相关配置(.config),内核才会启动内核签名功能如何查看驱动是否加入签名查看驱动程序,最后面数据是否是签名Demo假设驱动原创 2022-07-11 11:04:09 · 2209 阅读 · 1 评论 -
9. Linux驱动 - Input输入子系统驱动模型
类似platform的框架,负责实现linux输入设备的一种框架。Linux将其中的固定部分放入内核,自动完成,驱动开发只需要实现易变部分。输入子系统对应的设备文件是固定的名称输入子系统的主设备号固定:13输入子系统设备驱动层实现触发事件事件包含的键值注意:数组操作必须按照位操作,set_bit。然后,底层的硬件检测逻辑还是按照Linux驱动IO的检测逻辑来。在使用必须最后上报SYN事件,否则没有效果。设备文件在用户层打开,read时使用结构体和大小读取,每次根据判断code内容的类型。..原创 2022-07-07 21:14:11 · 661 阅读 · 0 评论 -
8. Linux驱动 - Platform总线驱动模型
Platform:平台设备总线驱动模型将软件驱动和硬件隔离,减少移植成本。Linux使用 模型。platform在Linux内核中实现了一条虚拟总线,叫做 platform_bus_type:总线上维护两条链表:dev(设备)链表: platform_device,drv(驱动)链表:platform_driver。匹配的动作发生在添加驱动软件或者硬件节点的时候。match函数匹配成功后,调用probe函数,进行驱动。match过程(优先级):编程只负责向内核添加节点就可以了,匹配过程内核已经设计好原创 2022-06-28 11:04:19 · 371 阅读 · 0 评论 -
7. Linux驱动 - 中断与异常
发生的场景:访问共享资源的代码叫做临界区。解决方式:中断屏蔽 => 解决SMP以外的竞态情形原子操作 => 判断是有效的,机制需要自己实现,是其他机制的基础。能解决所有竞态。自旋锁 => 可以解决除中断以外的竞态。衍生的自旋锁可以解决所有竞态(中断+自旋锁)。自旋锁扩展信号量 => 睡眠等待锁,临界区时间可以很长,允许睡眠。可用于中断上下文。信号量扩展 ==> 读写信号量(struct rw_semaphore)互斥体(mutex) 也可用于内核竟态,相当于初始值为1的信号量总结:非原创 2022-06-18 18:28:04 · 376 阅读 · 0 评论 -
6. Linux驱动 - 内核竞态
内核竞态,发生的场景:访问共享资源的代码叫做临界区。解决方式:原创 2022-05-31 21:29:58 · 85 阅读 · 1 评论 -
5. Linux驱动 - 内存IO映射与混合设备
IO内存映射内核中能直接访问的是虚拟地址,但是访问硬件寄存器需要通过物理地址。一般物理地址不能直接访问,但是可以通过IO内存映射间接访问。将硬件寄存器物理地址映射到虚拟地址空间,依赖MMU操纵虚拟地址,方法同物理地址的使用方法(比较原始,不建议)使用内核提供的IO内存操作函数进行操作(推荐)#include <linux/io.h>// 访问虚拟地址,就相当于访问物理地址void* ioremap(u64 offset, unsigned long size); // 物理地原创 2022-05-30 21:34:41 · 199 阅读 · 0 评论 -
4. Linux驱动 - 字符设备驱动细节记录
Linux驱动设备驱动核心函数Linux驱动使用GNU C标准,与标准C有区别。这里主要使用struct初始化不需要提供所有对象,并且可以使用省略写法。参见file_operations使用。Linux设备分类字符设备:按字节流访问。绝大多数设备都是字符设备。通过字符设备文件来访问。块设备:按数据块访问,块大小一般是固定的。通过块设备文件访问。网络设备:一般指网卡设备,结合网络协议栈(TCP/IP)。不通过文件访问,通过套接字访问。系统调用的文件IO操作:open,close,read,w原创 2022-05-29 21:52:40 · 103 阅读 · 0 评论 -
3. Linux驱动 -HelloWorld Final
一个完善的驱动模块包含模块参数在内的hello world驱动:(hello.c)#include <linux/module.h>#include <linux/kernel.h>#include <linux/fs.h>#include <linux/init.h>#include <linux/cdev.h>MODULE_LICENSE("GPL");MODULE_AUTHOR("Andy");MODULE_DESCRIP原创 2022-05-29 19:03:51 · 130 阅读 · 0 评论 -
2. Linux驱动 -HelloWorld Plus
Linux驱动 -HelloWorld Plus这里是一个加强版的helloworld只实现了open功能Code#include <linux/module.h>#include <linux/kernel.h>#include <linux/fs.h>#include <linux/init.h>#include <linux/cdev.h>#define MYMAJOR 200#define MYCNT 2#d原创 2022-05-24 22:01:50 · 108 阅读 · 0 评论 -
1. Linux 驱动 - HelloWorld
Linux 驱动 - HelloWorld开发环境:Ubuntu 22.04uname -r 查看source版本sudo apt install linux-source-xxxx 其他依赖:build-essentialkernel-packagegccmakekernel-sourcekernel-headerslibncurses-devlibssl-devlibelf-devHello Worldhello.c#include<linux/init.原创 2022-05-24 20:11:35 · 356 阅读 · 0 评论