自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(150)
  • 资源 (11)
  • 收藏
  • 关注

原创 lspci详解

lspci是一个Linux命令,用于列出系统中的PCI总线设备信息。PCI(Peripheral Component Interconnect)是一种常见的计算机总线标准,用于连接各种外部设备(如网卡、显卡、声卡等)到计算机主板上。通过运行lspci命令,可以查看系统中安装的PCI设备的详细信息,包括设备的厂商信息、设备ID、驱动程序信息等。lspci命令通常在终端中执行,不需要特殊的权限。以下是lspci命令的一些常用选项:-v:显示更详细的设备信息,包括设备的IRQ、I/O端口等。

2024-03-11 19:48:15 1192

原创 P-States/C-States/S-States/G-States/D-States

P-States是指处理器的性能状态,可以根据需要调整处理器的工作频率和电压来平衡性能和能效。S-States是指系统的睡眠状态,可以让系统在空闲时进入低功耗状态以节省能量。G-States是系统的全局状态,通常用于描述整个系统的运行状态。C-States是处理器的特定状态,用于描述处理器的不同工作状态,包括工作状态和休眠状态D-States是指设备状态(Device States)

2024-03-01 11:47:34 788

原创 PCIe BAR、Type0、Type1介绍

BAR(Base Address Register)空间是指PCI设备中的基地址寄存器(Base Address Register)所映射的地址空间。每个PCI设备都有多个BAR,用于指示设备在系统地址空间中的位置。BAR空间通常用于映射设备的内存区域或I/O端口,以便系统软件可以与设备进行通信。在PCI设备的配置空间中,BAR寄存器存储了设备在系统地址空间中的基地址信息。系统软件在引导过程中会读取这些BAR寄存器的值,以确定设备在系统中的地址范围,并将设备映射到适当的地址空间中。

2024-02-29 09:18:29 1059

原创 Linux DKMS

DKMS(Dynamic Kernel Module Support)是一个框架,用于构建和安装内核模块。它允许第三方内核模块在系统内核升级时自动重新构建和安装,从而确保这些模块与新内核版本兼容。DKMS的工作原理是将内核模块的源代码和安装脚本存储在一个特定的位置,并在内核升级时重新构建和安装这些模块。这样,即使系统内核更新,这些第三方模块也可以保持有效,而无需手动重新编译和安装。DKMS的主要优点包括:1. 自动化:DKMS可以自动处理内核模块的构建和安装过程,简化了管理第三方模块的流程。

2024-02-29 09:13:24 582

原创 Linux sudo与/etc/sudoers

Defaults env_reset: 这个行指定了默认的环境变量重置规则,当用户使用sudo命令时,环境变量将被重置为默认值。Defaults mail_badpass: 这个行指定了当用户输入错误密码时,系统会发送邮件通知。Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin": 这个行指定了sudo命令的安全路径,即sudo命令可以在这些路径下执行。

2024-01-24 14:36:38 1136

原创 linux如何创建用户

useradd` 是一个在 Linux 系统中用于创建新用户的命令。它的语法如下:```useradd [选项] 用户名```以下是一些常用的选项:- `-c, --comment`:为用户添加注释/描述信息。- `-d, --home`:指定用户的家目录。- `-g, --gid`:指定用户所属的初始组。- `-G, --groups`:指定用户所属的附加组。- `-m, --create-home`:创建用户时同时创建家目录。

2024-01-24 14:33:08 419

原创 linux更新内核

官网链接:https://kernel.org内核下载库:https://mirrors.edge.kernel.org/pub/linux/kernel/root@cary:~# apt-get updateroot@cary:~# sudo apt-get install libncurses5-dev build-essential kernel-package flex bison libelf-dev libssl-dev编译的过程中肯能会报错,根据实际报错解决就好,google搜索

2024-01-22 09:35:24 583 1

原创 unchecked MSR access error: WRMSR to 0x3a

MSR 是英文 "Model Specific Register" 的缩写,翻译为中文是“模型特定寄存器”。MSR 是一种特殊类型的寄存器,用于存储处理器的特定配置和状态信息。每个处理器都可能有不同的 MSR,因为它们可能具有不同的架构和功能。MSR 可以用于控制和监视处理器的各种功能,例如性能监控、功耗管理、虚拟化支持等。通过读取和写入 MSR,软件可以与处理器进行交互,并对其进行配置和控制。MSR 是处理器的一部分,通常只能由特权级别较高的软件(如操作系统内核)访问。

2024-01-22 09:32:00 883

原创 linux命令ifconfig命令你真的懂了吗?

`inet6 addr: fe80::6e20:8ed3:2079:fa6e/64`:这是网卡的IPv6地址,当前设置为本地链路地址。- `inet addr:10.0.2.15`:这是网卡的IPv4地址,当前设置为动态分配的地址。- `HWaddr 08:00:27:71:02:68`:这是网卡的物理地址(MAC地址)。用于显示和配置网络接口的信息。- `RX packets:9893`:这是接收到的数据包的数量。- `overruns:0`:这是发送过程中溢出的数据包数量。

2024-01-04 13:44:09 890

原创 python实现PID温控算法

PID算法是一种常用的控制算法,用于调节和稳定控制系统的输出。PID代表比例(Proportional)、积分(Integral)和微分(Derivative)比例(Proportional):比例控制是根据当前误差的大小来产生输出的一部分。误差是指期望值与实际值之间的差异。比例控制通过将误差乘以一个比例常数来产生输出,该输出与误差成正比。比例控制的作用是使系统更快地响应误差,但可能会导致系统产生超调或震荡。积分(Integral):积分控制是根据误差的累积来产生输出的一部分。

2024-01-04 13:42:15 1529

原创 USB设备枚举

4.USB 主机发出一个设置地址的请求(建立过程,设置地址无数据过程),地址包含在建立包中,具体的地址USB 主机会负责管理,它会分配一个唯一的地址给新的设备。USB 设备在收到地址后,返回0 长度的状态包,主机收到0 长度的状态包之后,会返回一个ACK 给设备。这样设备就分配到了一个唯一的设备地址,以后主机就通过它来进行访问该设备。3.USB主机往地址0的设备的端点0发送设备描述符的标准请求(控制传输的建立过程)。2.设备复位后,USB 主机就会对地址为0 的设备发送获取设备描述符的标准请求。

2023-12-22 11:35:17 387

原创 USB基础知识

USB设备是指连接到计算机或其他设备的使用USB(Universal Serial Bus)接口进行数据传输和通信的外部设备。USB设备可以是各种类型的设备,包括但不限于以下几种:存储设备:如USB闪存驱动器、外部硬盘驱动器、SD卡读卡器等,用于存储和传输数据。输入设备:如键盘、鼠标、游戏手柄、扫描仪等,用于将用户的输入传输到计算机或其他设备。输出设备:如打印机、显示器、音频耳机、音箱等,用于从计算机或其他设备输出数据或音频/视频信号。

2023-12-22 10:18:44 960

原创 网络基础名词

答:TCP/IP协议是一组用于在互联网上进行通信的协议,包括TCP(Transmission Control Protocol)和IP(Internet Protocol)。答:NAT(Network Address Translation)是一种将私有IP地址转换为公共IP地址的技术,用于解决IP地址不足的问题。答:子网掩码是用于划分网络地址和主机地址的一种技术,用于确定IP地址中哪些位用于网络标识,哪些位用于主机标识。答:Cookie是一种在客户端存储数据的技术,用于跟踪用户会话和存储用户偏好设置。

2023-12-18 19:09:46 503

原创 linux网络命令基础面试题

如何查看网络接口的IPv6流量统计信息?如何查看网络接口的IPv6错误统计信息?如何查看网络接口的IPv6多播组信息?如何查看网络接口的IPv6组播邻居表?如何查看网络接口的IPv6组播路由表?如何查看网络接口的IP地址分配情况?如何查看网络接口的IPv6连接状态?如何查看网络接口的IPv6路由表?如何查看网络接口的IPv6邻居表?如何查看网络接口的错误统计信息?如何查看网络接口的IPv6地址?如何查看网络接口的MAC地址?如何查看网络接口的统计信息?如何查看网络接口的广播地址?

2023-12-18 19:07:12 351

原创 SGPIO介紹

串行通用输入输出(SGPIO)是一种将通用IO信号串行化的方法。SGPIO定义了发起者(例如主机总线适配器)和目标(例如持有磁盘驱动器的背板)之间的通信。目标通常将输出信号转换为多个并行LED信号,并提供来自通用输入的输入信号。

2023-12-18 11:23:58 887

原创 因为黑客帝国和qq被盗我选择了计算机

选择专业是每个人人生中的一项重要决策,它将直接影响到我们未来的职业发展和个人成长。在我选择计算机专业的道路上,有两个重要的经历对我产生了深远的影响。第一个就是《黑客帝国》,另一个是我QQ账号被盗的经历。第一部分:电影《黑客帝国》的启示 电影《黑客帝国》是一部科幻动作片,讲述了一个虚拟世界与现实世界的对抗故事。矩阵中生活的一名年轻的网络黑客尼奥发现,看似正常的现实世界实际上似乎被某种力量控制着,尼奥便在网络上调查此事。

2023-12-15 11:33:02 355

原创 linux lm_sensors传感器读取

lm_sensors是一个用于监测硬件传感器的工具,它可以用于获取计算机系统中各种硬件组件的温度、电压、风扇转速等信息。lm_sensors的作用主要包括以下几个方面:监测硬件温度:lm_sensors可以监测CPU、GPU、主板、硬盘等硬件组件的温度,并在温度超过预设阈值时触发警报。这有助于用户及时发现硬件故障或过热问题,避免硬件损坏或系统崩溃。监测电压:lm_sensors可以监测系统中各种电压的变化,如CPU核心电压、+3.3V电压、+5V电压、+12V电压等。

2023-12-15 09:57:39 846

原创 linux面试题(一)

例如,`ssh-copy-id username@remotehost` 将将当前用户的 SSH 公钥添加到名为 "remotehost" 的远程服务器上的 "username" 用户的授权密钥列表中。答案:使用 `head` 命令可以查看文件的前几行,使用 `tail` 命令可以查看文件的后几行。例如,`mv file1.txt newdir/file1.txt` 将文件 "file1.txt" 移动到名为 "newdir" 的目录中。答案:使用 `cat` 命令可以查看当前用户的 SSH 公钥。

2023-12-14 16:50:26 616

原创 github入门基础操作

GitHub是一个基于Git版本控制系统的代码托管平台,它提供了一个方便的平台,让开发者可以在上面存储、管理和分享代码。如果你是一个开发者,那么学习如何使用GitHub是非常重要的,因为它可以帮助你更好地管理你的代码和协作开发。在本篇文章中,我们将介绍如何使用GitHub,包括创建仓库、提交代码、拉取代码、分支管理等基础操作。

2023-12-14 16:37:49 1055

原创 GPIO模拟MDIO

SMI是MAC内核访问PHY寄存器接口,它由两根线组成,双工,MDC为时钟,MDIO为双向数据通信,原理上跟I2C总线很类似,也可以通过总线访问多个不同的phy。两线制:MDC(时钟线)和MDIO(数据线)。时钟频率:2.5MHz通信方式:总线制,可同时接入的PHY数量为32个通过SMI接口,MAC芯片主动的轮询PHY层芯片,获得状态信息,并发出命令信息。

2023-12-14 15:45:12 647

原创 PCIe设备热插拔-理论篇

PRSNT1#和PRSNT2#信号与PCIe设备的热插拔相关。在基于PCIe总线的Add-in 卡中,PRSNT1#和PRSNT2#信号直接相连,而在处理器主板中,PRSNT1#信号接地,而PRSNT2#信号通过上拉电阻接为高。不同的处理器系统处理PCIe 设备热拔插的过程并不相同,在一个实际的处理器系统中,热拔插设备的实现也远比图4-3 中的示例复杂得多。值得注意的是,在实现热拔插功能时,Add-in Card需要使用“长短针”结构。

2023-12-14 15:12:04 993

原创 Linux0.11内核源码解析-printk

处理包括:将回车符'\r'转换为换行符'\n'(如果配置允许),将换行符'\n'转换为回车符'\r'(如果配置允许),将换行符'\n'转换为回车符'\r'并插入队列中(如果配置允许),将字符转换为大写(如果配置允许)。首先将fs寄存器和ds寄存器的值压入栈中,然后将fs寄存器的值设置为ds寄存器的值,这是为了在访问buf时使用fs寄存器,因为fs寄存器通常用于指向当前进程的TSS(任务状态段),而TSS中包含了当前进程的内核栈。最后,将栈中的值弹出,恢复fs寄存器和ds寄存器的值,返回打印的字符数i。

2023-12-12 17:20:19 1247

原创 Linux0.11内核源码解析-string待更新

sting.h头文件包含了所有的字符串操作函数。

2023-12-12 15:36:41 390

原创 Linux0.11内核源码解析-malloc

Linux内核版本0.11中的`malloc.c`文件实现了内存分配的功能。在这个版本的Linux内核中,`malloc.c`文件包含了内核级别的内存分配函数,用于分配和释放内核中的内存。这些函数可以帮助内核管理可用的内存,并允许内核动态地分配和释放内存,以便在运行时满足不同模块或进程的内存需求。基本上,它实现了类似C标准库中的`malloc()`和`free()`函数的功能,但是是针对内核级别的操作而设计的。

2023-11-01 19:43:45 352

原创 Linux0.11内核源码解析-exec.c

开始,则分析shell程序名和其参数;3.对当前调用进程进行运行新文件前初始化操作,指向新执行文件的i节点,复位信号处理句柄,根据头结构信息设置局部描述符地址和段长;create_tables函数用于根据给定的当前堆栈指针值p以及参数个数argc和环境变量个数envc,在新的程序堆栈中创建环境和参数变量指针表,并返回此时的堆栈指针值sp。1.执行对参数和环境参数空间页面的初始化操作,初始化空间页面指针数组,根据执行文件名取执行对象的i节点,计算参数个数和环境变量个数,检查文件类型、执行权限。

2023-10-31 20:10:35 596

原创 kdump安装/配置/测试

【代码】kdump安装/配置/测试。

2023-10-19 15:27:06 200

原创 initramfs介绍

initramfs(Initial RAM Filesystem)是一种临时文件系统,它在Linux系统启动过程中被加载到内存中。它包含了必要的驱动程序、工具和配置文件,用于在内核启动后挂载真实的根文件系统之前,对系统进行初始化和配置。initramfs的主要作用是在内核启动时提供一个基本的、最小的文件系统,以便内核能够访问所需的驱动程序和工具。它通常比实际的根文件系统更小,因此可以更快地加载到内存中。这使得系统在启动过程中能够更快地完成初始化阶段,提高了系统的响应速度。

2023-10-19 13:41:50 1311

原创 Linux0.11内核源码解析-truncate.c

truncate文件只要实现释放指定i节点在设备上占用的所有逻辑块,包括直接块、一次间接块、二次间接块。从而将文件节点对应的文件长度截为0,并释放占用的设备空间。

2023-08-17 10:37:31 737 1

原创 Linux0.11内核源码解析-fcntl.c/iotcl.c/stat.c

dup返回当前值最小的未用句柄,dup2返回指定新句柄的数值,句柄的复制操作主要用在文件的标准输入、输出重定向和管道方面。fcntl.c实现了文件控制系统调用fcntl和两个文件句柄描述符的复制系统调用dup()和dup2()。复制文件句柄,参数fd是要复制的文件句柄,arg是新文件句柄的最小数值,返回值是新文件句柄或者错误码。系统调用用于对打开文件描述符进行操作和控制,通过传递不同的命令()是否有效,即必须小于已打开文件描述符的最大数目(),并且与当前进程的文件描述符表中的相应条目()来实现不同的操作。

2023-08-08 14:42:05 348

原创 linux网卡命名规则

一致可预测枚举aseth[0123]s0遇到不确定反直觉, orLOM) andIn Linux,拓扑无缝更换systemd•结合eno1),•••ens1•••enp2s0),••••••eth0).1.A rule in●2.A rule in3.A rule in4.A rule in1.en2.wl3.wwindexslot>function>dev_id[f]0device.

2023-07-31 13:44:35 289

原创 pci slot number

PCIE槽位号码指的是PCI Express(Peripheral Component Interconnect Express)插槽的物理编号。PCIe插槽是一种用于连接扩展卡(如显卡、声卡、网卡等)的接口标准。计算机主板上通常会提供多个PCIe插槽,每个插槽都有一个唯一的编号。PCIE槽位号码用于在主板上标识每个PCIe插槽的位置,以方便用户识别和安装扩展卡。

2023-07-27 20:20:31 1563 1

原创 PCIe Error Signaling and Logging

PCI Express定义了两种错误报告范式:baseline capability and the Advanced Error Reporting Capability。baseline错误报告能力是所有PCI Express设备都需要具备的,它定义了最低限度的错误报告要求。高级错误报告能力是为了更强大的错误报告而定义的,并且通过特定的PCI Express能力结构来实现。

2023-07-26 14:15:19 377

原创 Linux0.11内核源码解析-buffer.c

高速缓冲区在整个五路内存中所处的位置缓冲区划分,分为缓冲区头和缓冲区块缓冲区双向链表结构内核访问流程hash函数(设备号^逻辑块号)Mod 307。

2023-07-21 11:50:05 216

原创 Linux0.11内核源码解析-open.c

fs/open.c实现文件的创建、打开、关闭,文件宿主和属性的修改、文件访问权限的修改、文件操作时间的修改等等。lib/open.c是up用户空间文件打开函数,lib/open.c->open()调用fs/open.c->sys_open()代码里都做了详细的解释这是一个用于表示UNIX操作系统中的i节点(inode)结构体。以下是每个变量的含义:- `i_mode`:i节点的访问模式(如文件、目录、设备等)。- `i_uid`:拥有该i节点的用户ID。

2023-07-07 10:23:37 457

原创 Linux0.11内核源码解析-read_write.c

read_write.c主要是实现文件系统调用read(),write()和lseek()三个功能read和write函数分别是调用file_dev.c/pipe.c/block_dev.c/char_dev.c实现相对应的函数。

2023-07-04 15:13:34 513

原创 Linux0.11内核源码解析-char_dev.c

char_dev.c文件包括字符设备文件访问函数,主要是有rw_ttyx(),rw_tty(),rw_memory()和rw_char()函数,另外还有一个设备读写函数指针表。

2023-07-04 11:15:53 353

原创 Linux0.11内核源码解析-pipe.c

进程间通信(IPC,Inter-Process Communication)是指在不同进程间进行数据通信和交换的过程。管道(pipe)是一种进程间通信的机制,它是一种单向、先进先出的通信方式。一个进程将数据写入管道,而另一个进程从管道中读取数据。在Linux或Unix系统中,进程间还可以使用共享内存、信号量、消息队列等不同的IPC机制进行通信。通过IPC,进程可以在互不依赖和独立运行的情况下,共享资源和数据,实现协同完成任务。

2023-06-20 15:13:19 505

原创 Linux0.11内核源码解析-file_dev.c

然后,代码通过增加位置(pos)来更新写入位置,并在需要时更新文件的大小(inode->i_size)和修改标记(inode->i_dirt = 1)。代码首先检查文件打开标志(filp->f_flags)是否包含O_APPEND标志,如果包含,则将写入位置(pos)设置为文件的当前大小(inode->i_size),否则将写入位置设置为文件指针(filp->f_pos)的值。如果成功读取到了磁盘块(bh非空),则代码会将该磁盘块中的数据逐个字节地复制到缓冲区中,然后释放该磁盘块(brelse(bh))。

2023-06-19 14:43:28 840

原创 Linux0.11内核源码解析-block_dev.c

代码首先根据位置指针将其右移 BLOCK_SIZE_BITS 位,得到块号(block),然后使用与运算将其与 (BLOCK_SIZE-1) 进行按位与操作,以获取在块内的偏移量(offset)。使用 get_fs_byte 函数从用户空间的缓冲区(buf)逐个字符地读取数据,并将其写入内核空间的缓冲区(p)。更新位置指针(*pos)的值,增加已写入的字节数(written),减少待写入的字节数(count)。更新位置指针(*pos)的值,增加已读取的字节数(read),减少待读取的字节数(count)。

2023-06-15 20:51:46 596

原创 Linux0.11内核源码解析-bitmap.c

位图是一种用于描述二进制状态的数据结构,常用于表示数据是否存在、已使用等情况。在操作系统中,位图常用于管理内存分配、文件系统的索引节点等。初始化位图:将位图中所有位都置为指定的状态(0或1)。设置位图中指定位的状态:将指定位的状态设置为指定的值(0或1)。在位图中查找指定范围内第一个可用的位:从指定位置开始,查找第一个值为指定值(0或1)的位,并返回该位的索引值。在位图中查找指定范围内连续的可用位:从指定位置开始,查找指定数量的值为指定值(0或1)的连续位,并返回该连续位的起始索引值。

2023-06-14 11:47:09 866

uboot移植文档.zip

uboot移植文档,rk3399,2440,详细移植文档

2021-02-25

linux_uart.zip

Linux c串口编程,用于48 ports串口服务器串口测试工具,已删减部分功能,只留下串口部分。

2020-08-13

windows git 安装和配置

windows 下是怎么进行 下载,安装,配置git 的,提供全面的文档

2019-02-27

Linux进程通信代码

LinuxIPC通信代码,包含有匿名管道,命名管道,消息队列,信号量,信号,共享内存

2019-01-02

栈的四则运算测试代码

关于栈的四则运算测试代码,来自040老师

2018-10-11

详细的HID协议

USBHID协议

2018-09-28

Opencv灰度对比度

谓掩膜其实就是一个矩阵,然后根据这个矩阵重新计算图片中像素的值。 掩膜主要有以下用途: 提取感兴趣区,用预先制作的感兴趣区掩模与待处理图像相乘,得到感兴趣区图像,感兴趣区内图像值保持不变,而区外图像值都为0。 屏蔽作用,用掩模对图像上某些区域作屏蔽,使其不参加处理或不参加处理参数的计算,或仅对屏蔽区作处理或统计。 结构特征提取,用相似性变量或图像匹配方法检测和提取图像中与掩模相似的结构特征。

2018-09-23

VST015和OpenCV

博客详细讲解怎么配置opencv和vs2015的环境,还有进行简单的代码测试

2018-09-22

linux内核链表与测试代码

博客详细讲解Linux内核链表,教你看懂Linux内核链表与普通链表有什么不一样,并且有测试代码

2018-09-22

linux内核链表

博客详细讲解Linux内核链表,教你看懂Linux内核链表与普通链表有什么不一样

2018-09-22

面试常写的c语言函数

面试嵌入式工程师常见的手写C语言函数,全部摘录与Rtthread内核源码进行少量修改

2018-09-20

空空如也

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

TA关注的人

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