Linux系统编程-通过sys子系统控制led
Linux sys 子系统在 Linux 系统中,“sys 子系统” 通常指以 sysfs 虚拟文件系统 为核心的一套内核子系统。
它是 Linux 设备模型的用户空间接口,主要用于 暴露内核对象(如设备、驱动、内核组件等)的信息、属性及层次关系,并提供用户空间与内核对象的交互通道。
sysfs 最早在 Linux 2.6 内核中引入,如今已成为 Linux 设备管理、内核状态监控的核心组件之一。
1.1 sys 子系统的核心:sysfs 虚拟文件系统sysfs 的本质是一个 内核态与用户态之间的 “桥梁”,它通过虚拟文件的形式将内核中的对象(如设备、驱动、总线等)及其属性映射到用户空间(挂载点通常为 /sys)。
用户可通过读写 /sys 下的文件,直接获取内核对象信息或修改其配置(需权限)。
与 proc 文件系统(/proc)不同,sysfs 更强调 “层次化结构” 和 “对象属性”:
proc 侧重进程状态、系统全局信息(如 /proc/cpuinfo);
sysfs 则聚焦于设备、驱动等内核对象的 “结构化信息”(如设备的厂商、状态、配置参数),且数据格式更规范(多为键值对 ...
Linux系统编程-文件IO操作
文件描述符(File Descriptor)在 Linux 中,所有打开的文件都通过文件描述符(非负整数)来标识。默认的三个文件描述符:
0:标准输入(STDIN)
1:标准输出(STDOUT)
2:标准错误(STDERR)
类型:int
范围:0 ~ 1023,每个进程最多允许打开 1024 个文件/资源。
打开文件:open()功能:打开或创建一个文件,并返回文件描述符。
函数原型:
123#include <fcntl.h>int open(const char *pathname, int flags);int open(const char *pathname, int flags, mode_t mode);
参数说明:
pathname:文件路径
flags:打开方式(必须包含且只能包含以下之一)
O_RDONLY:只读
O_WRONLY:只写
O_RDWR:读写
可选标志:O_CREAT(创建文件)、O_TRUNC(清空文件)、O_APPEND(追加模式)等
mode:当使用 O_CREAT 时,指定新文件的权限(如0644)
返回值:
成功: ...
基于立创泰山派的Linux驱动开发笔记
资料汇总硬件设计立创-泰山派开发板
文档资料【立创·泰山派RK3566】开发板
视频资料BiliBili-立创泰山派训练营
BiliBili-泰山派驱动开发
BiliBili-北京迅为-嵌入式学习之Linux驱动篇
开发环境搭建在虚拟机上安装 Ubuntu18虚拟机介绍虚拟机(Virtual Machine,简称VM)是一种计算机软件模拟的计算机系统。它模拟了足够多的硬件,以实现一个完整的、独立的计算环境,可以在一个物理机器(宿主机)上同时运行多个独立的操作系统(客户机操作系统)。虚拟机的关键特性包括:
隔离性:每个虚拟机都运行在自己的环境中,与其他虚拟机和宿主机操作系统隔离,这意味着一个虚拟机的崩溃或故障不会影响到其他虚拟机或宿主机。
封装性:虚拟机通常以文件形式存在,可以很容易地备份、复制、迁移或恢复。
硬件无关性:虚拟机可以在不同的物理硬件上运行,只要该硬件上安装了相应的虚拟化软件。
资源分配:虚拟机可以指定分配给它的CPU、内存、存储和网络资源,允许用户根据需要调整资源分配。虚拟机通常由以下几部分组成:
虚拟化层(Hypervisor):这是运行在物理硬件上的软件层,负责 ...
bit1个数计算算法
BK算法(Brian Kernighan’s算法)123456789101112unsigned char countBit1InByte(unsigned char byte){ unsigned char count = 0; while (byte) { byte &= (byte - 1); count++; } return count;}
此算法的思想是利用 n & (n-1) 可以将 n 的最右边的 1 置零的特性,通过迭代直到 n 变为 0,统计迭代次数即可。
它的运行时间与字节中bit1的位数成正比,而不是与字节的总位数成正比。因此计算效率不稳定,适用于bit1较少的场景。
位移法123456789101112131415161718192021222324252627282930313233#include <stdio.h> typedef unsigned char BYTE;typedef unsigned short WOR ...
bat脚本
🚲 🚗 ✈️ 🚀
🚀 桌面快捷方式箭头和盾牌去除123456789101112131415@REM 此脚本需要以管理员身份运行@REM 快捷方式小箭头和需要提权运行的提示图标均为透明图标reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell Icons" /v 29 /d "%systemroot%\system32\imageres.dll,197" /t reg_sz /freg add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell Icons" /v 77 /d "%systemroot%\system32\imageres.dll,197" /t reg_sz /f@REM 关闭文件资源管理器taskkill /f /im explorer.exe@REM 清除原先的图标缓 ...
RaspberryPi-PICO新建工程
🚲 🚗 ✈️ 🚀
🚀 工程文件目录组成以创建一个 blink 工程为例
首先新建一个 blink 目录,该目录结构如下所示:
1234567.└── blink ├── build ├── CMakeLists.txt ├── main │ └── blink.c └── pico_sdk_import.cmake
build 和 main 是目录,build 用于存放编译后的文件,main 目录则用于存放工程相关的 .c 和 .h 文件。
pico_sdk_import.cmake 这个文件是从 pico-sdk 中拷贝过来的,拷贝命令如下:
1cp $PICO_SDK_PATH/external/pico_sdk_import.cmake .
CMakeLists.txt 是 CMake 的配置文件,内容如下:
123456789101112131415161718192021222324# 指定最低的cmake版本cmake_minimum_required(VERSION 3.12)# 指定依赖文件include(pico_sdk_im ...
LeetCode面试必刷75题
🚲 🚗 ✈️ 🚀
🚀 交替合并字符串 - 简单题目:
给你两个字符串 word1 和 word2 。请你从 word1 开始,通过交替添加字母来合并字符串。
如果一个字符串比另一个字符串长,就将多出来的字母追加到合并后字符串的末尾。
返回 合并后的字符串 。
示例 1:
输入:word1 = “abc”, word2 = “pqr” 输出:”apbqcr” 合并后: apbqcr
示例 2:
输入:word1 = “ab”, word2 = “pqrs” 输出:”apbqrs” 解释:注意,word2 比 word1 长,”rs” 需要追加到合并后字符串的末尾。 合并后:apbqrs
示例 3:
输入:word1 = “abcd”, word2 = “pq” 输出:”apbqcd” 解释:注意,word1 比 word2 长,”cd” 需要追加到合并后字符串的末尾。 合并后:apbqcd
题解 - 暴力求解定义一个数组或列表,依次读取word1和word2的字符并存储在该数组上,最后返回该数组。
12345678910111213141 ...
python离线安装库
🚲 🚗 ✈️ 🚀
以DrissionPage库为例
首先在一个可以联网的电脑可以离线安装包以及依赖库
12# 使用中科大镜像源下载离线安装包以及依赖库,下载到当前目录pip download -d ./ -i https://pypi.mirrors.ustc.edu.cn/simple/ DrissionPage
新建 requirement.txt 文件。
然后将命令行上的包文件名按照倒序的方式复制到 requirement.txt 中。
可以将所有Saved开头的文字一起负责到 requirement.txt ,然后用 vscode 打开,将前面的文字一起删除,最后进行倒序即可。
将文件夹拷贝到需要离线安装的电脑,并进入文件夹内,使用下面的命令进行安装。
1pip install -r requirement.txt ##按照脚本内安装包的顺序安装库
python脚本
🚲 🚗 ✈️ 🚀
🚀 修改文件名功能,打印当前目录下所有文件的文件名,并将文件名中的 ‘.’ 和 ‘-‘ 之间的字符替换成 ‘__’ (包括’.’ 和 ‘-‘ )。
12345678910111213141516171819202122232425262728293031323334353637383940414243444546import osimport re# 获取指定目录下的所有文件名def get_file_names(directory): # 遍历目录下的所有文件,并将文件名添加到列表中 file_names = [] for filename in os.listdir(directory): if os.path.isfile(os.path.join(directory, filename)): file_names.append(filename) return file_names# 打印所有文件名def print_file_names(file_names): for filenam ...
HTML学习笔记
🚲 🚗 ✈️ 🚀
🚀 HTML简介
HTML 的英文全称是 Hyper Text Markup Language,即超文本标记语言。
HTML 是所有网站的基础,我们所看到的所有网站都是由 HTML 构成的。
HTML 最初于1989年由 CERN 的 Tim Berners-Lee 发明。HTML 基于更古老一些的语言 SGML 定义,并简化了其中的语言元素。这些元素用于告诉浏览器如何在用户的屏幕上展示数据,所以很早就得到各个Web浏览器厂商的支持。
🚀 第一个程序12345678910111213141516<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>hello程序</title> </head> <body> <h1>一级标题</h1> ...