- 博客(33)
- 资源 (1)
- 收藏
- 关注
原创 Linux 系统中设置开机启动脚本
如果你想在用户登录到图形桌面环境 (如 GNOME, KDE, XFCE) 时启动一个脚本或应用程序,可以使用桌面环境的自启动功能。如果你的系统还在使用 SysVinit (例如非常老的系统,或者像 Devuan 这样的发行版),你需要将脚本放在。选择哪种方法取决于你的具体需求、脚本的复杂性以及你所使用的 Linux 发行版。是一个在所有其他系统服务启动完成后,用户登录前执行的脚本。无论哪种方法,核心都是让系统在启动过程中的某个阶段执行你的脚本。(同上,确保可执行,使用绝对路径)。
2025-05-12 17:33:33
830
原创 linux驱动gpio模拟iic
通过 Linux 内核的i2c-gpio驱动,可以方便地使用 GPIO 模拟 I2C 总线。设备树中定义 GPIO 引脚和 I2C 设备,内核驱动通过标准的 I2C 接口与设备通信。这种方法适用于没有硬件 I2C 控制器的情况。
2025-03-21 14:56:02
519
原创 Systemd 服务文件(service)
编写systemd服务文件是管理 Linux 服务的重要技能。通过合理配置[Unit][Service]和[Install]部分,可以灵活地控制服务的行为。建议在编写完成后,仔细测试并查看日志,确保服务按预期运行。
2025-03-11 14:38:23
1397
原创 DEVICE_ATTR使用
在 Linux 内核开发中,是一个非常有用的宏,用于在设备驱动中创建设备属性(device attributes)。这些属性可以通过 sysfs 文件系统暴露给用户空间,允许用户空间程序读取或修改设备的某些特性。是 Linux 设备模型的一部分,广泛用于驱动开发。本文将详细讲解的用法,并提供一个简单的例程。
2025-03-05 14:54:09
1057
原创 module_init 详解
是一个宏,定义在 Linux 内核头文件中。是 Linux 内核模块开发中的核心宏,用于指定模块的初始化函数。初始化函数负责模块的初始化工作,返回0表示成功,非0表示失败。使用__init和__exit修饰符优化内存。注意错误处理、资源管理和调试信息的输出。理解模块加载和卸载的生命周期,确保模块的正确性和稳定性。通过掌握的使用方法,你可以更好地开发和调试 Linux 内核模块,为内核功能扩展提供支持。
2025-02-28 10:41:06
1030
原创 nandflash坏块管理
NAND Flash 的坏块管理是存储系统设计中的核心问题,直接影响设备的可靠性、性能和寿命。通过合理的坏块标记、识别和管理策略,可以有效延长 NAND Flash 的使用寿命,减少数据丢失的风险。坏块来源:出厂坏块和运行时坏块。坏块标记与识别:通过坏块标记和运行时检测识别坏块。坏块管理策略:坏块表、坏块替换、坏块跳跃、ECC、磨损均衡等。优化与挑战:减少管理开销、提高可靠性、适配不同厂商的 NAND Flash。
2025-02-27 17:13:08
1171
原创 C语言队列
队列(Queue)是一种先进先出(FIFO,First-In-First-Out)的线性数据结构。它类似于现实生活中的排队,新元素被添加到队尾,而从队首移除元素。为了避免“假溢出”现象(即队列还有空间,但 rear 指针已经到达数组末尾),通常使用循环队列。循环队列通过取模运算 (%) 来实现队首和队尾指针的循环移动。选择哪种实现方式取决于具体应用场景的需求。如果队列大小已知且固定,
2024-12-11 17:21:14
682
原创 linux-SLUB分配器
SLUB 是 Linux 内核中的一种高效的内存分配器,专门用于处理小块内存的分配和释放。它简化了内存管理的设计,减少了内存碎片,并提供了强大的调试功能,因此在现代 Linux 系统中被广泛使用。
2024-08-22 16:03:13
665
原创 kmemleak使用
kmemleak是 Linux 内核中用于检测内存泄漏的工具,其设计目的是帮助开发人员发现内核中的内存分配与释放不匹配的情况。了解kmemleak的工作原理对开发和调试内核模块非常重要。下面将详细介绍kmemleak的原理、实现机制和相关细节。
2024-08-22 15:48:21
716
原创 Linux内核中内存申请与释放的函数接口详解
总之,Linux内核中的内存申请与释放函数接口为内核开发者提供了灵活而强大的工具。因此,内核开发者必须深入了解这些函数接口的工作原理和最佳实践,以确保内存的正确使用和有效管理。Linux内核中的内存管理是一个复杂而关键的部分,它负责为内核数据结构、进程、系统调用等提供必要的内存资源。不同,它分配的内存不是物理上连续的,但在虚拟地址空间中是连续的。时,必须确保释放的内存块是之前通过兼容函数分配的,并且该内存块在释放后不应再被访问。是一个较低级的函数,它只分配一个物理页面,并返回一个指向该页面的指针。
2024-02-21 11:14:22
928
原创 UBI文件系统
UBI文件系统的主要目的是提供闪存设备的可靠性和可用性,并减少闪存器件上的坏块影响。请注意,UBI文件系统通常是在底层闪存设备驱动程序之上构建的,因此它需要与特定的MTD(Memory Technology Device)驱动程序一起使用。总之,UBI文件系统是一种用于闪存设备的可靠和灵活的文件系统解决方案。在Linux中,与UBI(Unsorted Block Images)相关的命令主要用于管理UBI卷和UBI文件系统。使用ubiformat命令时,你需要指定要格式化的UBI设备的路径作为命令的参数。
2023-12-04 16:45:50
912
原创 Linux工作队列
在模块初始化函数中,我们使用kmalloc为工作项分配内存,并使用INIT_WORK宏初始化工作项,将处理函数my_work_func与工作项关联起来。它是在标准工作队列的基础上增加了延时功能,允许将工作项推迟到未来的某个时间点执行。使用schedule_delayed_work函数将工作项添加到延时工作队列中,并指定延时时间。在模块初始化函数中,使用INIT_DELAYED_WORK宏初始化工作项,并将其与工作项处理函数关联起来。// 将延时工作项添加到延时工作队列,并设置延时时间为5秒(5000毫秒)
2023-12-04 16:33:23
323
原创 linux中printk详解
是Linux内核中用于日志记录的重要函数。通过合理使用日志级别标记和适当的格式字符串,可以有效地记录内核消息并提供故障排除和调试的有用信息。是日志级别标记,用于指定消息的重要性级别。这些标记可以与消息文本一起传递,以便内核日志系统对消息进行适当的处理和过滤。但请注意,直接修改这些值可能会影响系统的稳定性和调试能力,所以在明确知道你在做什么的情况下才进行修改。是一种用于打印内核消息的函数。Linux内核的日志打印级别。函数,但专门用于内核日志记录。如果你想修改这些值,你可以直接往。的返回值是打印的字符数。
2023-11-24 16:04:51
839
1
原创 C语言位操作
位操作是计算机编程中的一个基本概念,它允许程序员直接操作整数的二进制位。C语言提供了一系列位操作符,使得我们可以对整数进行位级别的操作。最后,虽然位操作为我们提供了底层控制的能力,但也要谨慎使用,确保它们不会使代码过于复杂或难以维护。
2023-11-24 14:28:30
211
1
原创 C语言位域使用
如果要在不同的平台或编译器之间共享数据,最好避免使用位域,或者确保对位域的访问和解析方式在所有目标平台上是一致的。综上所述,位域是一种在C语言中紧凑存储数据的方法,适用于一些特定的内存敏感场景。在使用位域时,需要考虑可移植性和平台相关性的问题,并谨慎使用以确保代码的正确性和稳定性。C语言中的位域(Bit Fields)是一种在结构体中存储数据的方式,它允许在结构体中定义一些字段,每个字段占用指定的位数。当使用位域定义结构体后,可以通过结构体的实例来访问和存储位域字段的值。一、位域的定义和使用。
2023-11-24 14:25:08
122
1
原创 AWK命令
AWK是一种文本处理工具,主要用于分析和处理文本数据,并根据指定的模式和条件执行相应的动作。AWK命令可以处理文本文件中的每一行,并将其分割成字段,然后根据指定的模式和条件对字段进行处理。这些示例只是AWK功能的一部分,实际上AWK可以做更复杂的数据处理和文本分析。当一行与指定的模式匹配时,AWK命令将执行相应的动作。其中,选项用于指定AWK命令的行为,模式是用于匹配行的正则表达式或条件,动作是要执行的操作。条件是用于判断是否执行动作的表达式。动作是要执行的操作,可以包括打印字段、修改字段、计算数值等。
2023-11-16 11:24:13
105
1
原创 C语言基本语法
函数是C语言的基本组成单位,用于实现特定的功能。掌握这些内容,将为进一步学习C语言的高级特性和应用打下坚实的基础。在C语言中,标识符用于标识变量、函数、数组等的名称。在C语言中,必须先定义变量才能使用。这些控制流程使得程序能够根据不同的条件执行不同的操作。C语言还预留了一些关键字,这些关键字具有特殊含义,不能用作标识符。使用这些运算符可以构成各种表达式,进行数据的运算和处理。C语言的控制流程包括顺序结构、选择结构和循环结构。此外,还可以通过结构体、联合体等方式定义复杂的数据类型。等都是C语言的关键字。
2023-11-08 14:11:47
89
1
原创 C语言开发环境搭建
为了学习和实践C语言,首先需要搭建一个适合的开发环境。本说明将指导您完成C语言开发环境的搭建过程,确保您能够顺利地编写、编译和运行C语言程序。通过以上步骤,您应该能够成功搭建C语言的开发环境,并在所选的开发环境中编写、编译和运行C程序。祝您学习愉快,编码顺利!请根据您的操作系统和个人偏好选择适合的开发环境。
2023-11-08 14:09:55
314
1
原创 C语言概述
随着时间的推移,C语言的简洁、高效和可移植性等特点逐渐得到认可,并成为计算机科学领域的重要语言之一。C语言作为一种经典且强大的编程语言,在系统编程、应用软件、游戏开发和嵌入式系统等领域发挥着重要作用。其简洁、高效和可移植性的特点使得它成为计算机科学教育中不可或缺的一部分。希望通过本文档的介绍,读者能够对C语言有一个全面而准确的认识。C语言是一种广泛应用于系统编程、应用软件、游戏开发等领域的计算机编程语言。本文档将对C语言进行概述,介绍其发展历史、特点以及应用领域,帮助读者对C语言有一个初步的认识。
2023-11-08 14:07:46
82
1
原创 Linux中的Netlink详解
下面是一个更详细的内核Netlink代码示例,包括内核模块的初始化和退出函数,Netlink套接字的创建和消息处理函数。该示例代码实现了一个简单的内核模块,通过Netlink与用户空间进行通信,将接收到的消息打印到内核日志中。在这个示例代码中,我们首先创建了一个Netlink套接字,并将其绑定到指定的地址上。然后,我们构造了一个Netlink消息,将用户空间的消息内容复制到消息缓冲区中,并通过。对于Netlink来说,地址由。以下是一个详细的用户空间代码示例,用于与上述内核模块中的Netlink进行通信。
2023-11-08 11:00:06
910
1
原创 Linux内核通知链(Notifier Chain)使用
当某个事件发生时,内核会遍历通知链,依次调用链表中的每个处理函数,将事件传递给它们。通知链提供了一种简单而灵活的事件通知机制,允许内核模块之间以异步方式进行通信。Linux内核通知链是一种内核机制,用于在内核事件发生时通知注册的内核模块。通过通知链,模块之间可以以一种松耦合的方式进行通信,实现事件的高效传递和处理。其中,nb是指向通知块的指针,event是事件类型,data是事件数据。内核模块需要实现一个通知处理函数,用于接收并处理通知事件。接下来,需要定义一个通知块,并将处理函数注册到通知链中。
2023-11-08 10:31:28
382
1
原创 python获取图片位置的RGB
import os,timeimport pyautogui as pagfrom ctypes import * # 获取屏幕上某个坐标dx = 0dy = 0def color(x, y): gdi32 = windll.gdi32 user32 = windll.user32 hdc = user32.GetDC(None) # 获取颜色值 pixel = gdi32.GetPixel(hdc, x, y) # 提取RGB值 r = pixel.
2020-05-09 21:11:09
3890
原创 python入门
这是我半学期学习的python入门的代码# _*_ coding:utf-8 _*_# ege = '16'# t = '174.5'# print('我的名字叫李明,我今年'+ege,'岁,身高'+t)# print('我的名字叫\'李明\',我今年'+ege,'岁,身高'+t)# ot= 172.5# # t = ot+2# # print('李明今年的身高为',t)z# y = 2002# z = 2020# print('李明的年龄为',z-y)# zhanghua = .
2020-05-09 19:43:23
663
原创 学生成绩
从键盘上输入若干学生成绩(成绩在 0~100 之间),计算平均成绩,并输出低 于平均分的学生成绩,用输入负数结束输入。#include "stdio.h" void main() { int i,n; float a[100],ave,sum=0.0; printf("请输入你要计算几个学生的成绩:"); scanf("%d",&n); for(i=0;i<n;i++) ...
2018-02-11 16:11:17
518
原创 二分法
编写猜数游戏,程序给定某个整数,从键盘上反复输入数据进行猜测。如果 未猜中,程序提示输入过大或者过小;如果猜中,则输出猜的次数,最多允 许猜 10 次#include "stdio.h" void main() { int i,m=90,n,t; printf("\n 请输入数来进行猜数游戏,你有 10 次机会。请输入:"); for(i=0;i<9;i++)/*限制猜测次数,用 i&...
2018-02-11 16:05:51
313
原创 二维数组应用
采用二维数组输入多个学生五门课的成绩,分别求出每个学生的平均成绩和 每门课的平均成绩。#include "stdio.h" void main() { int a[100][5],i,j,n; float ave1[100]={0}; float ave2[80]={0}; printf("请输入你要计算几个人成绩,n = "); scanf("%d",&n); for(i=0...
2018-02-11 16:03:49
1956
原创 无线网
时间限制:3000 ms | 内存限制:65535 KB难度:3描述我们的乐乐同学对于网络可算得上是情有独钟,他有一个计划,那就是用无线网覆盖郑州大学。现在学校给了他一个机会,因此他要购买很多的无线路由。现在他正在部署某条大道的网络,而学校只允许把他的无线路由器放在路的正中间。我们默认这条大道是笔直的并且它在任何地方的宽度都一样。并且所有的路由器的覆盖面积是相同的。现在乐
2018-02-04 20:30:19
395
原创 国王的魔镜
描述国王有一个魔镜,可以把任何接触镜面的东西变成原来的两倍——只是,因为是镜子嘛,增加的那部分是反的。比如一条项链,我们用AB来表示,不同的字母表示不同颜色的珍珠。如果把B端接触镜面的话,魔镜会把这条项链变为ABBA。如果再用一端接触的话,则会变成ABBAABBA(假定国王只用项链的某一端接触魔镜)。给定最终的项链,请编写程序输出国王没使用魔镜之前,最初的项链可能的最小长度。输入第一行
2018-02-04 20:28:35
1401
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人