自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

  • 博客(254)
  • 资源 (7)
  • 收藏
  • 关注

原创 pr_debug打印输出

将xxxx_function里面调用pr_debug的地方使能输出,我们在kernel dmesg里面就能看到这条语句的打印。里面会列出内核里面使用pr_debug的所有地方。里面包括xxxx_function里面调用pr_debug的地方。

2023-03-17 11:06:43 1150 1

原创 VIM快速跳转

例如,"6fm"表示移动到光标右边的第6个'm'字符上。f 命令移动到光标右边的指定字符上,例如,"fm",会把移动到光标右边的第一个'm'字符上。w b 跳转到下个/上个单词的第一个字符处。t 命令和”f“命令的区别在于,它移动到光标右边的指定字符之前。T 命令是”t“命令的反向版本,它移动到光标右边的指定字符之后。, 命令会反方向重复前一次输入的f, t, F, T命令。F 命令则反方向查找,也就是移动到光标左边的指定字符上。命令重复前一次输入的f, t, F, T命令,

2023-01-10 21:51:41 2703

转载 VIM缓冲区

其中u表示这个缓冲区是vim软件(及其插件)本身打开的缓冲区,而不是用户为了编辑某个文件打开的缓冲区。特别的,如果用户只想查看自己打开的缓冲区,直接用":ls"命令即可;通过buffer编号或者buffer对应的file_path选择某个缓冲区,并在当前窗口覆盖显示选定的buffer。通过:bn / :bp / :blast / : bfirst切换缓冲区(所有缓冲区循环滚动)(1) 最前面的每行1,2,3,4表示缓冲区的编号;--> 删除指定范围的缓冲区。--> 卸载指定范围的缓冲区。

2023-01-08 19:41:23 1237

原创 Linux hash表和hlist

linux hash和hlist

2022-10-28 14:01:41 471

原创 Linux kernel如何获取PID

/获取线程pid描述符。// 传入进程任何一个线程pid, 并查找进程PID(就是进程中leader线程的PID)

2022-10-26 15:50:45 1644

原创 shell遍历目录并提取子目录/文件名字

{file//dir/path}:将全部dir 替换为 path:/path1/path2/path3/my.file.txt。${file/dir/path}:将第一个dir 替换为path:/path1/dir2/dir3/my.file.txt。${file#*/}:删掉第一个 / 及其左边的字符串:dir1/dir2/dir3/my.file.txt。${file%.*}:删掉最后一个 . 及其右边的字符串:/dir1/dir2/dir3/my.file。单一符号是最小匹配;

2022-10-09 17:26:13 7478 1

原创 Linux 开发常用网站

2.linux kernel源码在线阅读。3.linux kenel源码下载。4.ubuntu 发行版内核开发包。1. 根据命令查安装包。

2022-09-28 15:51:44 524

原创 Linux Initrd

ramdisk就是将内存的一部分分配为一个分区并作为硬盘来使用。对于系统运行时不断使用的程序,将它们放在ramdisk中将加快计算机的操作,如大数据量的网络服务器、无盘工作站等。

2022-09-28 10:28:27 233

原创 EDKII加载bin文件并运行

kernel.asm文件的代码会将屏幕填充为蓝色。

2022-09-13 09:47:51 412

原创 vscode C++ IntelliSense插件配置compile_commands.json

本篇文章是的姊妹篇,ccls的配置相对来说更复杂,并且不支持gdb调试,所以这里再写一篇通过配置微软官方的C++ IntelliSense插件实现compile_commands.json解析,从而加快代码解析速度。

2022-09-12 19:04:50 4859

原创 EDKII实现bmp图片加载并显示的应用程序

1.EDKII 支持BGR32作为原始数据的BMP图片2.所以,我们需要先找到或者自己制作一张满足这个要求的BMP图片3.这里,我们采用自己制作BMP图片的方式,制作过程分为两骤(实现代码如下):a.用ffmpeg将.png图片转换成BGRA原始数据b.编写一个将BGRA数据组装成BMP图片的程序。

2022-09-06 17:34:41 865 1

原创 C语言结构体的存储空间分配

1.如果某个机器的整型值长度为4个字节,那么结构体的起始存储位置必须能被4整除。2.编译器按照成员列表的顺序一个接一个地给每个成员分配内存。其中对于各个成员,编译器根据其类型分配赋予对其要求,比如char成员,按地址能被1整除对齐;short成员,按地址能被2整除对齐;int成员,按地址能被4整除对齐......3.编译器在存储结构体成员时,为了满足各个成员的正确边界对齐要求,会在成员之间添加用于填充的额外内存空间。

2022-09-05 15:28:46 4057

原创 POSIX线程使用signal模拟“中断“处理流程

1. 与中断handler对应的,信号也有handler。每个特定的中断对应一个handler,每个特定的信号也对应一个handler。2. 中断通过硬件或者int指令等方式触发handler执行,信号通过pthread_kill向某个线程发送信号触发handler执行。该线程收到信号后,会打断当前执行流并跳转到信号handler执行,之后返回到当前执行流。......

2022-08-31 10:39:54 523

原创 lscpu命令信息解读

但是随着处理器的增加,共享内存可能会导致内存访问冲突越来越厉害,且如果内存访问达到瓶颈的时候,性能就不能随之增加。在物理分布上,NUMA node的处理器和内存块的物理距离更小,因此访问也更快。所以使用NUMA的模式如果能尽量保证本node内的CPU只访问本node内的内存块,那这样的效率就是最高的。BGA为CPU集成在主板上,不可拆卸式的。core:core是物理概念,一个独立的硬件执行单元,对应于物理CPU(但是是多个core集成在一个真正的物理CPU中),也是处理器芯片上的独立计算核心。...

2022-08-29 14:21:16 1022

原创 UEFI第一话:运行环境搭建

【代码】UEFI第一话:运行环境搭建。

2022-08-27 09:13:40 359

原创 如何获取一个目录下的子文件和子目录

【代码】如何获取一个目录下的子文件和子目录。

2022-08-24 15:58:41 927

转载 Linux Completions - “wait for completion” barrier APIs

If you have one or more threads that must wait for some kernel activity to have reached a point or a specific state, completions can provide a race-free solution to this problem. Semantically they are somewhat like a pthread_barrier() and have similar use-

2022-08-24 14:22:53 492

原创 XV6内核线程与进程切换过程

2. 期间两次调用swtch()函数,分别完成: 进程1 context->sechduler context和sechduler context->进程2 context的切换;1. 进程切换通过scheduler()内核线程中转实现;

2022-08-20 21:57:51 243

原创 DRM TTM概述

4.struct ttm_tt —— 对于应用程序来说,并不会关心内存设备和驱动,它们关心的是能够写入数据的虚拟内存;但对于显卡来说,它关心显存或映射为显存的内存,所以,把虚存和显存绑定在一起的一个对象就呼之欲出了,这就是ttm_tt。3.struct ttm_buffer_object —— TTM每分配一块内存,不管在系统内存中还是在显卡内存中,都会创建一个ttm_buffer_object对象,代表这块内存的实体,处理数据的放置和CPU映射。约定,这里说的显存包括VRAM和GTT。...

2022-08-18 12:38:07 1391

原创 设置UBUNTU默认启动的内核版本

该命令会自动更新/boot/grub/grub.cfg。二.设置默认启动的内核条目。一.可启动的内核条目。

2022-08-18 11:28:25 4068

原创 Linux waitqueue

处于这种状态的进程,要么正在运行,要么正准备被CPU调度运行。正在运行的进程就是当前进程(由current所指向的进程),而准备运行的进程只要得到CPU就可以立即投入运行,CPU是这些进程唯一等待的系统资源。系统中有一个运行队列(run_queue),用来容纳所有处于可运行状态的进程,调度程序执行时,从中选择一个进程投入运行。在后面我们讨论进程调度的时候,可以看到运行队列的作用。.........

2022-08-14 20:20:27 256

原创 进程角度和内核角度看进程运行

2.站在内核角度看——内核属于所有进程,所有进程共用内核代码。在执行流层面,内核中的同一函数(比如一个驱动的ioctl)被多个进程并发执行。在数据流层面,所有在同一函数的并发执行流他们的数据流都是独立的(无全局变量,都是栈上的局部变量)。1.站在进程角度——内核只属于自己,整个执行流贯穿用户进程代码到内核代码。或者换句话说,可以把内核看成用户进程的一个动态链接库,内核代码仅仅是进程的一部分代码。insmod ko以后开两个shell,分别执行测试程序,观察读出来的buffer的值的变化。...

2022-08-12 16:08:18 299

原创 DRM Memory Management

一句话总结二者差异:TTM既支持集成显现,也支持独立显卡的显存管理;GEM只能支持集成显卡的显存管理。

2022-08-09 10:11:28 658

原创 Linux下为网卡分配IP的工具dhclient

如果01-netcfg.yaml中配置的设备与lspci得到的一致,那系统开机就可以为enp0s2分配IP地址。否则,就需要执行dhclient为网卡分配IP地址。其中,enp0s2是中的0和2是怎么来的?可见网卡位于pci的bus0dev2。

2022-08-08 15:13:29 639

原创 QEMU guest与host通过网络通信——bridge/hostfwd/guestfwd

将到主机端口 hostport 的TCP 或 UDP 连接重定向到来宾端口 guestport 上的来宾 IP 地址 guestaddr。如果未指定 guestaddr,则其值为 xxx15(内置 DHCP 服务器提供的默认第一个地址)。通过指定hostaddr,可以将规则绑定到特定的主机接口。如果未设置连接类型,则使用 TCP。可以多次给出此选项。例如,要将主机 X11 连接从屏幕 1 重定向到访客屏幕 0,请使用以下命令:# 在主机# 这个主机 xterm 应该在来宾 X11 服务器中打开。......

2022-08-08 09:56:48 4420

原创 socket实现进程间通信

socket实现进程间通信

2022-08-05 22:06:16 579

原创 Linux内核头文件相关知识

Linux内核头文件相关知识

2022-08-03 22:27:20 93

转载 Hypervisor, KVM, QEMU总结

在QEMU-KVM中,KVM运行在内核空间,QEMU运行在用户空间,实际模拟创建,管理各种虚拟硬件,QEMU将KVM整合了进来,通过/ioctl调用/dev/kvm,从而将CPU指令的部分交给内核模块来做,KVM实现了CPU和内存的虚拟化,但kvm不能虚拟其他硬件设备,因此qemu还有模拟IO设备(磁盘,网卡,显卡等)的作用,KVM加上QEMU后就是完整意义上的服务器虚拟化。操作系统虚拟化是在操作系统中模拟出运行应用程序的容器,所有虚拟机共享内核空间,性能最好,耗费资源最少。...

2022-07-28 17:23:33 1118

原创 vsnprint和snprintf的区别

vsnprintf和vsprintf的区别

2022-07-25 10:16:29 298

转载 git远程分支

远程引用是对远程仓库的引用(指针),包括分支、标签等等。你可以通过来显式地获得远程引用的完整列表,或者通过获得远程分支的更多信息。然而,一个更常见的做法是利用远程跟踪分支。远程跟踪分支是远程分支状态的引用。它们是你无法移动的本地引用。一旦你进行了网络通信,Git就会为你移动它们以精确反映远程仓库的状态。请将它们看做书签,这样可以提醒你该分支在远程仓库中的位置就是你最后一次连接到它们的位置。它们以的形式命名。例如,如果你想要看你最后一次与远程仓库origin通信时master分支。iss53。。...

2022-07-23 17:34:52 269

转载 Linux checkpatch.pl

Checkpatch(scripts/checkpatch.pl)isaperlscriptwhichchecksfortrivialstyleviolationsinpatchesandoptionallycorrectsthem.Checkpatchcanalsoberunonfilecontextsandwithoutthekerneltree.Checkpatchisnotalwaysright.Yourjudgementtakesprecedenceovercheckpatchmessages。.

2022-07-22 15:04:28 3021

转载 git submodule使用

虽然Git提供的子模块功能已足够方便好用,但仍请在为主仓库项目添加子模块之前确保这是非常必要的。毕竟有很多编程语言(如Go)或其他依赖管理工具(如Ruby’srubygemsnpmCocoaPodsandCarthage)可以更好的handle类似的功能主仓库项目的合作者并不会自动地看到子模块仓库的更新通知的。所以,更新子模块后一定要记得提醒一下主仓库项目的合作者。...

2022-07-22 14:54:37 220

原创 vscode + ccls环境配置

3.在vscodesetting.json文件中添加如下配置(配置ccls插件,并关闭cpp插件与ccls冲突的功能,保留cpp插件的debug功能)见上面github仓库中的说明。2.安装vscodeccls客户端。1.编译安装cclsserver。1.Makefile工程。

2022-07-15 15:33:17 2474

原创 驱动的参数传入:module_param,module_param_array,module_param_cb

device driver也可以像用户态程序一样在运行开始时传入参数,例如argc和argv。此外,module_param还会在/sys/module/下面创建对应的节点,可以查看有哪些数值是可供查询或修改的。其定义在include/linux/moduleparam.h中。如果在设定或读取参数时,需要进行类似通知等操作,可以使用module_param_cb,在get或set时调用对应的回调函数。module_param_array和module_param调用的是默认的回调函数, module_par

2022-07-12 12:33:57 633

原创 XV6系统调用实现

x86 有四个特权级,从 0(特权最高)编号到 3(特权最低)。在实际使用中,大多数的操作系统都使用两个特权级,0 和 3,他们被称为内核模式和用户模式。当前执行指令的特权级存在于 %cs 寄存器中的 CPL 域中。在 x86 中,中断处理程序的入口在中断描述符表(IDT)中被定义。这个表有256个表项,每一个都提供了相应的 %cs 和 %eip。一个程序要在 x86 上进行一个系统调用,它需要调用 int n 指令,这里 n 就是 IDT 的索引。int 指令进行下面一些步骤(硬件自动完成):int 指令

2022-07-10 22:46:57 588

转载 XV6 swtch.S详解

二.swtch函数执行过程:当任意进程调用swtch函数时,会将它的两个参数压栈,并且将swtch的下一条指令的地址压栈(即EIP),ESP寄存器保存栈顶地址,函数调用时,context *new 和context *old都作为已知参数传入。此时它的栈空间是这样的:执行了这两条语句之后,它的栈空间变成了这样:这四条是压栈指令,用于将上下文相关的四个寄存器中的地址压栈。执行完这四条指令之后,栈空间是这样的: 接下来要进行栈顶指针的切换。这里,context *old表示旧进程的上下文指针,

2022-07-09 21:42:01 366

原创 Linux list解读

linux list_head插入过程

2022-07-08 12:24:12 373

原创 ACPI知识(高级配置和电源接口)

一.ACPI包括的内容Category:ACPI - OSDev Wikihttps://wiki.osdev.org/Category:ACPI 在ACPI协议簇中,MADT是一个比较重要的部分。二.ACPI MADT (Multiple APIC Description Table) —— it describes how the APIC works.要理解MADT的结构,着重看MADT page最后的解析代码。......

2022-07-06 10:32:16 776

原创 ebp/栈帧/call stack

(1)ESP:栈指针寄存器(extended stack pointer),其内存放着一个指针,该指针永远指向系统栈最上面一个栈帧的栈顶。(2)EBP:基址指针寄存器(extended base pointer),其内存放着一个指针,该指针永远指向系统栈(包含多个栈帧)最上面一个栈帧的底部。1.栈帧——整个系统调用路径上的某个函数占用的一个系统栈片段(帧)。2.下图展示了两个栈帧的系统栈。3.从上图可知,当前函数对应的栈帧的栈底(第一个压栈值)实际上压入的正是ebp寄存器的值,而这个值正是其caller栈

2022-07-02 22:39:58 1752

转载 直接跳转与间接跳转

转载自:https://www.csdn.net/tags/MtjaIg1sNDE1MDYtYmxvZwO0O0OO0O0O.htmlhttps://www.csdn.net/tags/MtjaIg1sNDE1MDYtYmxvZwO0O0OO0O0O.html正常执行的情况下,指令按照它们出现的顺序一条一条地执行。跳转()指令会导致执行切换到程序中一个全新的位置。在汇编代码中,这些跳转的目的地通常用一个标号(label)指明。考虑下面的汇编代码序列:指令会导致程序跳过指令,而从popq指令开始继续执行

2022-07-01 14:44:38 3278

sourceInsight_主题文件.zip

source_insight 暗黑主题文件;护眼主题,让你更有看代码的乐趣和冲动,包括字体文件和sourceinsight xml配置文件

2020-02-11

MSP430f149+CC2500无线通信开发板原理图

基于MSP430f149+CC2500无线通信开发板原理图,根据该原理图制作的开发板已经顺利调试通过,使用的是Altium Designer 09制作

2017-09-02

STM32F103RC+CC2500无线通信原理图

该原理图展示了一款基于STM32F103RC+CC2500无线通信的电路设计原理图,基于该原理图的电路板实物已经调试通过,保证原图的正确性,有问题可以加我

2017-09-02

AM335X led操作

1.以一个LED操作为例,展示了如何根据应用需要配置AM335X相应寄存器。 2.AM335X寄存器都是以基地址+偏移地址来寻址的。

2017-09-01

MSP430F149封装 Altium designer 格式文件

MSP430F149封装 Altium designer 格式文件 直接导入到altium designer 或者protel 99se即可使用

2014-05-13

FPGA红外解码程序

使用FPGA实现红外解码,并且在数码管上面显示解码结果;

2012-06-03

无线上网方便上网,增加路由信号

可以让你无线上网,增加路由器信号可以让你无线上网,增加路由器信号

2011-03-20

空空如也

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

TA关注的人

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