Bootstrap

驱动学习篇

随记,不定时更新驱动相关知识,累积驱动开发相关经验

一、知识点

1. bios与vbios的区别

BIOS(Basic Input/Output System)和VBios(Video BIOS)是计算机系统中的两个不同的组成部分,它们具有以下区别:

  1. 功能不同:BIOS是计算机系统的基本输入/输出系统,负责启动计算机、初始化硬件设备和提供基本的操作系统功能。它包含了一些固化的程序和设置,用于管理计算机系统的硬件和软件。而VBios是显卡的BIOS,主要负责管理和控制显卡的工作,包括显示输出、显存管理、显示模式设置等。

  2. 定位不同:BIOS是计算机系统的一个整体组成部分,存在于主板上的固化芯片中。它与计算机的其他硬件设备(如处理器、内存等)紧密相关。而VBios则是显卡上的一个独立的固化芯片或固件,与显卡硬件紧密结合。

  3. 可更新性不同:BIOS通常可以通过固件升级来更新,以支持新硬件或修复现有的问题。而VBios的可更新性相对较低,通常只在显卡制造商发布的驱动程序中进行更新。

  4. 功能范围不同:由于BIOS是计算机系统的基本组成部分,它涉及到整个系统的初始化和管理,包括处理器、内存、硬盘等。而VBios仅涉及显卡的功能和设置,例如显示输出、分辨率、颜色设置等。

总之,BIOS是计算机系统的基本输入/输出系统,而VBios是显卡的BIOS,负责显卡的管理和控制。它们在功能、定位、可更新性和功能范围等方面存在区别。

2. “烧固件”的固件

在实际应用中,烧录固件时所指的“固件”可以包括各种类型的嵌入式软件程序,用于控制设备的操作和功能。以下是一些常见设备中可能需要烧录的固件类型及其示例:

  1. BIOS(基本输入/输出系统):
    -计算机的主板上存储的 BIOS,负责初始化硬件、启动操作系统等。

  2. UEFI(统一扩展固件接口):
    -最新的计算机主板和服务器通常采用 UEFI 替代传统 BIOS,用于提供更先进的引导和系统管理功能。

  3. 路由器固件:
    -路由器中的固件程序,控制网络路由、无线连接、安全设置等功能。

  4. 嵌入式系统固件:
    -嵌入式设备(如智能家居设备、工业控制系统)中的固件,用于控制设备的操作和功能。

  5. 固态硬盘固件:
    -固态硬盘(SSD)中的固件,影响存储器的性能、稳定性和兼容性。

  6. 显卡固件(VBIOS):
    -显卡中的 VBIOS,控制显示输出、分辨率、颜色深度等功能。

  7. 固件更新程序:
    -用于将新固件烧录到设备中的更新程序,确保设备具有最新的功能和修复漏洞。

这些都是常见设备中可能需要进行固件烧录的类型,通过更新固件可以改善设备的性能、功能和安全性。本人工作中常说的“烧固件”一般指的是擦除并写入vbios。

二、测试工具

1. glxgears-3D

齿轮(glxgears)是一个简单的 OpenGL 渲染器,用于测试 3D 图形的性能。在 Linux 系统中,你可以按照以下步骤下载并安装齿轮:

  1. 打开终端:在 Linux 中,按下 Ctrl + Alt + T 组合键来打开终端。

  2. 安装 Mesa 工具包:输入以下命令来安装 Mesa 工具包:

    sudo apt-get install mesa-utils
    

    Mesa 工具包是一个 OpenGL 实现,它提供了许多有用的工具,包括齿轮。

  3. 运行齿轮:在终端中输入以下命令来运行齿轮:

    glxgears
    

    这将会启动齿轮应用程序,并显示一个旋转的齿轮。你可以通过关闭应用程序来停止它。

请注意,齿轮并不是一个严格意义上的性能测试工具,因为它只是简单地旋转一个齿轮,而不涉及任何复杂的场景或纹理。因此,它只能提供一个粗略的性能估计。如果你需要一个更全面的性能测试工具,可以考虑使用更专业的测试软件,如 Unigine Heaven 或 3DMark。

2. glmark2-3D

glmark2 使用的 OpenGL 和 OpenGL ES API 进行测试,提供了一系列的渲染场景和测试选项,旨在评估计算机系统的 3D 图形渲染能力。

注意,glmark2 通过测试帧率(FPS)和性能得分,对系统的图形处理能力进行评估和比较。但主要用于比较不同系统或硬件之间的图形性能差异,并不一定代表实际应用程序的性能。在使用 glmark2 进行测试时,需要注意测试环境的一致性和可比性。

要在Ubuntu系统上安装 glmark2,可以按照以下步骤进行操作:

  1. 打开终端(Terminal)应用程序。你可以通过按下 Ctrl + Alt + T 快捷键来打开终端。

  2. 在终端中运行以下命令,以更新软件包列表和依赖关系:

sudo apt update
  1. 安装 glmark2 软件包:
    法一:通过包管理器安装
sudo apt install glmark2

法二:通过源代码编译安转(kylin系统实操推荐)
首先,确保你的系统上安装了必要的编译工具和依赖项。通常需要安装 gitcmakegccmake 等工具,以及 OpenGL 开发库。

# 从它的 GitHub 仓库中克隆源代码:
git clone https://github.com/glmark2/glmark2.git
# 切换到打了tag的发布版本
cd glmark2
git checkout
git checkout xxx
# 查看安装说明
vim README
vim INSTALL
# 此处选择第二种安装方式
# 配置:一般用来测gl,配置选x11-gl
./waf configure --with-flavors=x11-gl
# 编译
./waf
# 安装
./waf install --destdir=DESTDIR
# 运行
glmark2
  1. 安装完成后,你可以在终端中运行 glmark2 命令来启动 glmark2 基准测试程序。

glmark2 会执行一系列的图形测试,并显示性能得分和帧率等信息。你可以根据需要选择不同的测试选项,例如 glmark2glmark2-es2glmark2-es2-wayland 等。具体的选项可以通过运行 glmark2 --help 命令来查看。

请注意,在运行 glmark2 之前,确保你的系统已经安装了正确的显卡驱动程序,并且显卡支持所需的 OpenGL 版本。否则,可能会出现兼容性问题或无法运行的情况。

三、驱动包

1. Xorg中的三个包

xserver-xorg-video-amdgpu、
xserver-xorg-video-ati、
xorg-server

这里是对这三个包的详细说明:

  1. xserver-xorg-video-amdgpu:这是一个 Xorg 服务器驱动程序包,用于支持基于 AMD GPU 的显卡设备。它提供了与 AMD 显卡硬件通信所需的功能和接口。

  2. xserver-xorg-video-ati:这也是一个 Xorg 服务器驱动程序包,用于支持基于 ATI(现已归并入 AMD)GPU 的显卡设备。它提供了与 ATI 显卡硬件通信所需的功能和接口。然而,值得注意的是,从 Ubuntu 18.04 开始,AMDGPU 驱动已成为默认的开源驱动选择,因此在最新版本的 Ubuntu 中,xserver-xorg-video-ati 包通常不再被推荐使用。

  3. xorg-server:这是 X Window System 的服务器端实现,也被称为 Xorg 服务器。它是一个开源的图形显示服务器,负责管理输入设备(如键盘、鼠标)和输出设备(如显示器)之间的通信,以及处理图形渲染和窗口管理等任务。xorg-server 提供了通用的框架和接口,使得各种显卡驱动程序能够与 Xorg 服务器进行交互,并提供图形显示功能。

联系:

  • xserver-xorg-video-amdgpuxserver-xorg-video-ati 都是 Xorg 服务器的显卡驱动程序包,它们旨在支持不同系列的 AMD 显卡设备。它们的目标都是提供适当的接口和功能,从而使 Xorg 服务器能够与相应的显卡硬件进行交互。
  • xorg-server 是 Xorg 服务器本身,它是一个通用的图形显示服务器,可以与多种显卡驱动程序进行配合。

区别:

  • xserver-xorg-video-amdgpuxserver-xorg-video-ati 针对的是不同的 AMD 显卡系列。前者主要支持新一代的 AMDGPU 驱动程序,后者则支持旧一些的 ATI 驱动程序。
  • xserver-xorg-video-amdgpuxserver-xorg-video-ati 是作为 Xorg 服务器的插件或模块提供的,它们需要依赖 xorg-server 来运行。而 xorg-server 则是整个 X Window System 的核心组件。

需要注意的是,具体的软件包名称可能因不同的 Linux 发行版而略有不同,上述名称是基于 Ubuntu 系统的命名约定。如有需要,你可以参考特定发行版的文档以获取准确的软件包名称和相关信息。

3. 火焰图 FlameGraph

火焰图(Flame Graph)是一种可视化工具,主要用于分析和展示程序运行时的采样数据,特别是用于CPU性能分析。通过火焰图,可以直观地看到程序的性能瓶颈,识别出占用大量CPU时间的代码路径。以下是分析火焰图结果的一些要点:
(1)理解火焰图的结构:

  • X轴(水平轴):代表不同的代码路径或调用栈。每个矩形表示一个函数调用,宽度表示该函数在总样本中的比例。
  • Y轴(垂直轴):代表调用栈的深度。下往上看,可以追踪一个函数是被哪些上层函数调用的,从而了解整个调用链条。

(2)热点识别:

  • 火焰图最重要的应用是识别性能热点。如果某个矩形(函数调用)特别宽,说明该函数占用了较多的CPU时间,是一个潜在的性能瓶颈。
  • 关注火焰图中最大的、最宽的“火焰”,这些通常是你需要优化的地方。

(3)颜色含义:

  • 一般情况下,火焰图的颜色并没有特定的含义,只是为了区分不同的函数。

(4)过滤和聚焦:

  • 大多数火焰图工具允许你对某些部分进行放大、过滤或者聚焦。这对于大型应用程序尤为重要,因为它们的火焰图可能非常复杂。
  • 你可以通过这种方式专注于某个子树或者特定的代码路径,进行详细分析。

(5)结合代码分析:

  • 在识别出性能热点之后,往往需要回到具体的代码中,检查相应的函数实现,寻找可能的优化点。
  • 有时候,性能瓶颈可能是由于算法效率低下、资源争用、高频率的I/O操作等问题导致的,需要具体问题具体分析。

总之,通过火焰图,你可以直观地看到程序执行过程中各个函数所占用的CPU时间,从而找到性能瓶颈,进行针对性的优化。

在Kylin系统上运行火焰图的过程大致如下:

  1. 安装必要工具
    首先,在Kylin系统上安装所需的性能分析工具和火焰图生成工具。以下是一些必要步骤:
    (1)安装 perf
    perf 是一个强大的Linux性能分析工具,通常在许多Linux发行版中都包含。
sudo yum install perf    # 对于Yum-based系统,如CentOS
sudo apt-get install linux-tools-common linux-tools-generic    # 对于Debian-based系统,如Ubuntu

(2)安装 FlameGraph
火焰图工具由Brendan Gregg开发,可以从GitHub获取。

git clone https://github.com/brendangregg/FlameGraph.git
  1. 收集性能数据
    使用 perf 记录目标程序的性能数据。例如,如果你想分析一个名为 my_program 的程序:
sudo perf record -F 99 -a -g -- ./my_program

这会生成一个名为 perf.data 的文件,该文件包含了性能数据。
具体参数的含义如下:

  • sudo: perf通常需要权限来获取系统性能数据。
  • perf record: 表示要进行性能数据的记录。
  • -F 99: 指定采样频率为99赫兹,即每秒进行99次采样。
  • -a: 采集所有进程的数据,而不是只针对指定的进程。
  • -g: 采集调用关系(Call Graph)信息,可以显示函数调用关系。
  • – ./my_program: 表示要执行的程序是"my_program",这里可以替换成你要监测的具体程序。

你可以根据自己的需求添加其他参数选项,例如:

  • -p : 只监测特定进程的性能数据。
  • -e : 监测指定的硬件事件,比如指令数、缓存访问等。
  • -o : 将输出保存到指定文件中,以便后续分析。

根据实际需求,你可以结合perf的文档或手册来了解更多参数选项,并根据需要进行配置。

  1. 生成火焰图
    接下来,使用 perf 工具将性能数据转换为可以生成火焰图的格式。
sudo perf script > out.perf

然后,使用 FlameGraph 工具将 perf 数据转换为火焰图。

cd FlameGraph
./stackcollapse-perf.pl out.perf > out.folded
./flamegraph.pl out.folded > flamegraph.svg
  1. 查看火焰图
    生成的 flamegraph.svg 文件是一个SVG格式的火焰图,可以使用Web浏览器打开并查看。
xdg-open flamegraph.svg    # 在Linux桌面环境下

示例总结
以下是完整的流程汇总:

# 1. 安装必要工具
sudo yum install perf
git clone https://github.com/brendangregg/FlameGraph.git

# 2. 收集性能数据
sudo perf record -F 99 -a -g -- ./my_program

# 3. 生成火焰图
sudo perf script > out.perf
cd FlameGraph
./stackcollapse-perf.pl out.perf > out.folded
./flamegraph.pl out.folded > flamegraph.svg

# 4. 查看火焰图
xdg-open flamegraph.svg

注意事项

  • 需要具有超级用户权限来运行 perf 和其他一些性能分析工具。
  • 确保目标程序在收集数据期间有足够的负载,以便生成有意义的火焰图。

四、常见操作

1. 禁用集显

  • 两种方式:
    第一种,bios禁用集成显卡;第二种,修改grub配置文件(内核引导参数)禁集显。
    前者是直接从硬件上禁用,使系统识别不到集显;后者是移除集显的驱动,使它无法加载,也可以达到禁用的目的。
  • 具体操作:
  • bios禁用集显:不同固件禁用操作略微不同,可自行百度。
    样例:开机按delete进bios,进入display,选择显示优先顺序为独显。
  • 修改内核引导参数禁用:
    (法一,kylin服务器使用过)
  1. 首先确认台子存在集显和独显(其他显卡亦可)
lspci | grep VGA
  1. 查看集显具体信息
lspci -s 09:00.0 -vv

lspci -s 09:00.0 -vv 命令用于显示特定 PCI 设备的详细信息,包括其配置寄存器、驱动程序信息等。下面是该命令各部分作用:

  • lspci: 该命令用于列出系统中所有的 PCI 设备信息。
  • -s 09:00.0: 指定要显示详细信息的 PCI 设备的地址。在这里,09:00.0 是一个示例地址,实际使用时应根据系统中具体的 PCI 设备进行替换。
  • -vv: 这是 lspci 命令的选项之一,用于显示更为详细的信息。每个 -v 选项增加一层详细程度,因此 -vv 表示显示更详细的信息。
  1. 查看此时运行的内核的命令行参数:
cat /proc/cmdline
  1. 修改内核引导参数,即grub配置:
vim /boot/efi/EFI/kylin/grub.cfg

在module_blacklist=phytium_mci_pci后添加内容"module_blacklist=phytium_mci amdit=0"(若有某一部分则该部分无需添加)(目的是将集显加入黑名单)

  1. 重启系统以应用新的内核引导参数,禁用集成显卡。

(法二,可能有效,没试过)

  1. 以管理员身份编辑配置文件。你可以使用以下命令打开 GRUB 配置文件进行编辑:
sudo vim /etc/default/grub
  1. 找到 GRUB_CMDLINE_LINUX_DEFAULT 行,该行包含内核引导参数。将其修改为包含 video=disconnected 参数,例如:
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash video=disconnected"
  1. 保存文件并关闭编辑器。然后更新 GRUB 配置,使更改生效。运行以下命令:
sudo update-grub
  1. 重启系统以应用新的内核引导参数,禁用集成显卡。

请记住,具体操作可能会因操作系统版本和配置而有所不同,建议在操作前做好备份并确保了解自己系统的相关信息。

2. 接串口看信息

  1. 用串口线(含3端:TX、RX、GND)接上主板上标有CPU_UART的三个针孔。
    注意:一般情况下除了串口地线GND对应主板GND,其他两个反着接。即串口GND-主板GND,串口TX-主板RX,串口RX-主板TX。

注意:先确定串口位置和串口类型,主板间不一样。其中地线GND和主板电压想通,用万用表测没有电压差的即为GND针。
2. 串口一端接调试台的CPU_UART三个针孔,一端接主机(本人为windows),长度不够使用usb延长线。如图,串口使用的CH340 USB转TTL。
(龙芯:使用USB转RS232,需要下载对应该串口类型驱动)
4. 主板需要相应串口驱动,查看主机设备管理器,端口是否有“ USB-SERIAL CH340(COM4)”,括号对应主机的usb接口号。
设备管理器->端口 主机ssh连接调试台,识别到端口后,通过修改ssh的属性信息使串口打印信息显示在ssh上,修改内容如下图:
串口连接时修改属性-1
串口连接时修改属性-2
5. 调试台关机。重新启动后能在ssh上修改的属性窗口看到相应的串口打印信息(如果打印信息较少,可能是没有打开系统的信息,方法可以百度尝试解决)
本次串口打印信息依次为:进入BIOS的信息、进入系统的信息(从”按下xx键进入“开始)

3. 将所有信息实时打印到串口

调试时系统卡死,重启后无法获取相关log,将信息实时打印到串口可得到一手消息(出问题的log记录)
要将内核信息加入到串口打印中,可以参考以下步骤:(龙芯+UOS系统接RS232串口实测)
法一:修改系统配置文件(永久生效)
修改 /etc/grub.d/10_linux 配置文件:

  1. 打开 /etc/default/grub 文件,找到 GRUB_CMDLINE_LINUX_DEFAULT 行,并在其中添加一个参数 console=ttyS0,115200n1 loglevel=7。这个参数指定了将系统控制台输出重定向到串口设备 ttyS0,波特率为 115200,并将log信息详细程度开到最大7。例如:

    GRUB_CMDLINE_LINUX_DEFAULT="quiet splash console=ttyS0,115200n1 loglevel=7"
    
  2. 打开 /etc/grub.d/10_linux 文件,找到 linux_entry() 函数,然后在函数中找到类似以下的代码块:(此步实测不需要)

    if [ -z "${recovery_mode}" ] ; then
      echo "    linux   ${rel_dirname}/${basename} root=${linux_root_device_thisversion} ro ${args}"
    else
      echo "    linux   ${rel_dirname}/${basename} root=${linux_root_device_thisversion} ro single ${args}"
    fi
    

在这个代码块中添加一个参数 console=ttyS0,115200n1,以便将输出重定向到串口设备。例如:

if [ -z "${recovery_mode}" ] ; then
  echo "    linux   ${rel_dirname}/${basename} root=${linux_root_device_thisversion} ro ${args} console=ttyS0,115200n1"
else
  echo "    linux   ${rel_dirname}/${basename} root=${linux_root_device_thisversion} ro single ${args} console=ttyS0,115200n1"
fi

保存文件并退出。

  1. sudo权限看/boot/grub.cfg实际文件是否修改成功:
sudo su
vim /boot/grub.cfg
  1. 运行以下命令更新 grub 配置:

    sudo update-grub
    
  2. 重新启动系统,内核信息将会被输出到串口设备 ttyS0 中。如果你使用的是串口终端软件,可以通过该软件查看输出信息。

注意:请确保你的系统已经连接了串口设备,并且该设备已经正确设置。

法二:修改BIOS界面配置(本质相同,单次生效)
如图,按e进入编辑,此处一条一条的内容即为配置文件中menu_entry函数实现。
加入相关参数:

GRUB_CMDLINE_LINUX_DEFAULT="quiet splash console=ttyS0,115200n1 loglevel=7"

Ctrl+s保存后登陆系统,即可见串口打印了内核等的相关信息。

4. 制作系统安装U盘

本人工作在windows上常用Refus工具、linux用dd命令去做系统启动盘。
基本操作过程如下:
Windows使用Refus工具
需要:u盘(提前保存内容,后续格式化)、系统镜像、refus工具、windows系统机器
操作:

  1. 打开Refus,选好如下图选项后开始制作,
    在这里插入图片描述
  2. 完成后将U盘插入台子,BIOS设置启动顺序优先u盘,开始安装系统,安装好后拔出U盘重启即可。

linux使用dd命令
需要:U盘、系统镜像、linux系统机器
操作:

  1. 插U盘前后,用 df -h 查看所有存储设备及其挂载点,从而确定 U 盘的设备路径(如 /dev/sdX)。(命令lsblkfdisk -l也可)
  2. 如果你的u盘被分成多个分区了,你需要全部umount, 命令为sudo umount /dev/sdb1
  3. 使用dd命令将镜像写入刚才找到的分区,注意:不用写分区号。
    sudo dd if=/home/jack/ubuntu.16.04.iso of=/dev/sdb bs=4M
    设置块大小为 4MB,有助于提高写入速度。
    小技巧:你可以在另外一个终端观察运行情况。
    sudo watch kill -USR1 $(pgrep ^dd)
    解释一下:watch观察命令的运行,kill命令发送一段信号,-USR1是dd专用的信号,它接收到该信号,就会显示刻录的进度。
  4. 当刻录结束后,运行sync
    该命令是检查一下,刻录是否运行完毕,当sync结束后,就可以安全的拔出u盘了。(sudo eject /dev/sdX

5. ip配置注意事项

  1. IP地址冲突检查

检查IP地址是否与其他设备冲突

arp -a | grep <IP地址>

如果输出中有对应的MAC地址,则表示存在IP地址冲突。

  1. ssh服务检查(client和server安装、开机自启动)
  • 检查ssh的client和server是否安装,否则不能互ping通:
apt list | grep ssh
  • 检查SSH服务是否安装并默认启动:
sudo systemctl status ssh

如果SSH正在运行,您将看到类似以下输出:

● ssh.service - OpenBSD Secure Shell server
   Loaded: loaded (/lib/systemd/system/ssh.service; enabled; vendor preset: enabled)
   Active: active (running) since Wed 2024-05-12 10:12:59 PDT; 1 day 2h ago
 Main PID: 1234 (sshd)
    Tasks: 1 (limit: 4635)
   CGroup: /system.slice/ssh.service
           └─1234 /usr/sbin/sshd -D

要检查SSH是否设置为开机自启动,可以使用以下命令:

sudo systemctl is-enabled ssh

如果已经设置为开机自启动,会看到输出 enabled;没有则会看到输出 disabled

将SSH设置为开机自启动:

sudo systemctl enable ssh
  1. network服务重启

ip配置好后需要重新network:

sudo systemctl restart network/networking
  1. 防火墙状态检查

图像界面看防火墙设置是否关闭。下面命令方法暂未验证。

sudo systemctl status firewalld

如果防火墙已关闭,则输出将显示 inactive

  1. 网络配置文件静态IP配置检查
    检查网络配置文件中是否配置了静态IP地址.
    kylin系统:
# /etc/network/interfaces
auto eth0
iface eth0 inet static
    address 192.168.1.100
    netmask 255.255.255.0
    gateway 192.168.1.1

其他系统可尝试:(未验证)

cat /etc/sysconfig/network-scripts/ifcfg-<接口名称>

这将显示指定接口的配置信息。检查是否有 BOOTPROTO=static 行以及相应的IP地址配置。

  1. 网口状态检查
    以上事项都没问题但不能互ping通,则考虑是不是网口坏了,换换网线、网口。
  2. 互ping通但xshell连不上
    排除xshell问题后,图像界面切换成单/多用户模式,则能连上。(龙芯+uos遇到过,暂不清楚原因)
# 单次切换
sudo systemctl isolate multi-user.target
# 默认自启动
sudo systemctl set-default multi-user.target
  1. 相关ip配置命令
    (1)可设置ip(未深入了解)
ifconfig <网口名如eth0> <IP地址> 

6. linux系统 - 单/多用户模式、图形界面(GUI)

在Linux系统中,单用户模式通常用于系统维护和故障排除,而多用户模式是正常的运行状态,允许多个用户同时登录系统,通常具有网络和其他服务的支持。

  1. 进入多用户模式
    (1)单次切换 多用户目标:
    sudo systemctl isolate multi-user.target
    

(2)默认开机自启动 多用户模式:
bash sudo systemctl set-default multi-user.target
2. 进入单用户模式
(1) 单次切换 单用户模式:
bash sudo systemctl isolate rescue.target
(2)默认开机自启动 单用户模式(未验证)
bash sudo systemctl set-default rescue.target
3. 进入系统的图形界面(GUI)
(1)单次切换 图像界面
bash sudo systemctl isolate graphical.target
(2)默认开机自启动 图形界面
bash sudo systemctl set-default graphical.target

7. GDB调试Xorg

分析驱动代码xorg时,常结合gdb调试,常用方式有(sudo gdb -ppidof Xorg)和(sudo gdb /usr/lib/xorg/Xorg`)。
GDB具体使用见GDB调试
以下着重讲二者区别:
两种调试方式的区别在于如何指定被调试的进程和可执行文件:

  1. sudo gdb -p pidof Xorg

    • 这种方式是通过进程ID(PID)来调试正在运行的进程。具体步骤是:
      • pidof Xorg 命令会返回 Xorg 进程的 PID。
      • sudo gdb -p <PID> 将以超级用户权限启动 GDB,并附加到指定 PID 的进程(这里是 Xorg)上进行调试。
    • 这种方式适合于已经在运行中的 Xorg 进程,例如,在桌面环境中。
  2. sudo gdb /usr/lib/xorg/Xorg

    • 这种方式是直接调试可执行文件本身,而不是正在运行的进程。具体步骤是:
      • sudo gdb /usr/lib/xorg/Xorg 将以超级用户权限启动 GDB,并加载指定的 Xorg 可执行文件。
      • 这样做允许你在还没有启动 Xorg 或者无法直接进入桌面环境时调试 Xorg 的执行文件。

区别总结

  • 通过进程ID调试 (sudo gdb -ppidof Xorg`):

    • 适用于已经在运行中的进程。
    • 可以直接查看和调试当前正在进行的动态行为。
    • 需要确保你有足够的权限来附加到目标进程。
  • 直接调试可执行文件 (sudo gdb /usr/lib/xorg/Xorg):

    • 适用于调试还未启动或者无法直接访问的进程(例如,Xorg 在某些情况下可能无法直接启动或者会直接进入桌面环境)。
    • 允许你在启动之前设置断点和进行其他调试准备工作。
    • 需要知道可执行文件的确切路径,并确保你有权限访问该文件。

五、行业认知

1. 主流BIOS制造商

国内主流的 BIOS 制造商包括以下几家:

  1. 华硕(ASUS):华硕是一家知名的计算机硬件制造商,也生产主板和 BIOS。

  2. 技嘉(GIGABYTE):技嘉是一家台湾的电脑硬件制造商,在主板领域有一定的市场份额,也生产 BIOS。

  3. 微星(MSI):微星是一家全球知名的电脑硬件制造商,主要生产主板、显卡等硬件,并提供 BIOS 支持。

  4. 华擎(ASRock):华擎是主板制造商,也提供相应的 BIOS 产品。

目前可以说不管是御三家(华硕、技嘉、微星)、华擎、映泰台系主板厂商还是国内主板厂商基本上都选择了基于AMI BIOS研发自家的BIOS UI界面(主题外观)和交互逻辑(参数设置调教)。
详细文章可参考:主流BIOS制造商相关介绍

这些厂商在主板行业有一定影响力,他们生产的主板通常配备有各自定制的 BIOS。值得注意的是,随着技术的发展,UEFI 替代 BIOS 的趋势逐渐明显,越来越多的主板使用 UEFI 替代传统的 BIOS。

关于UEFI和BIOS,总的来说,UEFI 相对于传统的 BIOS 具有更快的启动速度、更大的硬盘容量支持、图形化用户界面、更好的安全性功能以及更强的扩展性。
详细文章可参考:如何以简单正确的姿势理解“UEFI”和“BIOS”

2. 窗口管理器 kwin、mutter、marco

  1. KWin:KWin是KDE桌面环境的默认窗口管理器,它负责管理窗口的布局、外观、动画效果等。KWin提供了丰富的窗口管理功能,包括窗口最大化、最小化、拖放、工作区切换等,同时也支持丰富的插件和扩展功能。

  2. Mutter:Mutter是GNOME桌面环境的默认窗口管理器,它负责管理窗口的显示、布局、交互等。Mutter使用Clutter库来实现硬件加速的图形渲染,同时也支持Wayland显示协议。

  3. Marco:Marco是MATE桌面环境的默认窗口管理器,它提供了基本的窗口管理功能,包括窗口装饰、移动、调整大小等。Marco旨在提供简洁而稳定的窗口管理体验,适合对性能要求较低的环境使用。

这些窗口管理器在不同的桌面环境中扮演着类似的角色,它们负责管理窗口的外观和行为,以及用户与窗口的交互。

参考来源

  1. dd命令使用:linux下使用dd命令写入镜像文件到U盘
;