大家好,欢迎来到IT知识分享网。
随记,不定时更新驱动相关知识,累积驱动开发相关经验
一、知识点
1. bios与vbios的区别
BIOS(Basic Input/Output System)和VBios(Video BIOS)是计算机系统中的两个不同的组成部分,它们具有以下区别:
- 功能不同:BIOS是计算机系统的基本输入/输出系统,负责启动计算机、初始化硬件设备和提供基本的操作系统功能。它包含了一些固化的程序和设置,用于管理计算机系统的硬件和软件。而VBios是显卡的BIOS,主要负责管理和控制显卡的工作,包括显示输出、显存管理、显示模式设置等。
- 定位不同:BIOS是计算机系统的一个整体组成部分,存在于主板上的固化芯片中。它与计算机的其他硬件设备(如处理器、内存等)紧密相关。而VBios则是显卡上的一个独立的固化芯片或固件,与显卡硬件紧密结合。
- 可更新性不同:BIOS通常可以通过固件升级来更新,以支持新硬件或修复现有的问题。而VBios的可更新性相对较低,通常只在显卡制造商发布的驱动程序中进行更新。
- 功能范围不同:由于BIOS是计算机系统的基本组成部分,它涉及到整个系统的初始化和管理,包括处理器、内存、硬盘等。而VBios仅涉及显卡的功能和设置,例如显示输出、分辨率、颜色设置等。
总之,BIOS是计算机系统的基本输入/输出系统,而VBios是显卡的BIOS,负责显卡的管理和控制。它们在功能、定位、可更新性和功能范围等方面存在区别。
2. “烧固件”的固件
在实际应用中,烧录固件时所指的“固件”可以包括各种类型的嵌入式软件程序,用于控制设备的操作和功能。以下是一些常见设备中可能需要烧录的固件类型及其示例:
- BIOS(基本输入/输出系统):
-计算机的主板上存储的 BIOS,负责初始化硬件、启动操作系统等。 - UEFI(统一扩展固件接口):
-最新的计算机主板和服务器通常采用 UEFI 替代传统 BIOS,用于提供更先进的引导和系统管理功能。 - 路由器固件:
-路由器中的固件程序,控制网络路由、无线连接、安全设置等功能。 - 嵌入式系统固件:
-嵌入式设备(如智能家居设备、工业控制系统)中的固件,用于控制设备的操作和功能。 - 固态硬盘固件:
-固态硬盘(SSD)中的固件,影响存储器的性能、稳定性和兼容性。 - 显卡固件(VBIOS):
-显卡中的 VBIOS,控制显示输出、分辨率、颜色深度等功能。 - 固件更新程序:
-用于将新固件烧录到设备中的更新程序,确保设备具有最新的功能和修复漏洞。
这些都是常见设备中可能需要进行固件烧录的类型,通过更新固件可以改善设备的性能、功能和安全性。本人工作中常说的“烧固件”一般指的是擦除并写入vbios。
3. 节点
1. /proc 目录:
/proc是一个虚拟文件系统,它包含了系统和内核的相关信息。这里的每个 “节点” 实际上都是一个文件或目录,包含了有关系统、进程、硬件的实时数据。- 例子:
/proc/cpuinfo:显示 CPU 信息(核心数量、架构等)。/proc/meminfo:显示内存的使用情况。/proc/uptime:显示系统的运行时间。/proc/[PID]:每个进程的虚拟目录,包含该进程的状态、内存使用、打开的文件等信息。
2. /sys 目录:
/sys是另一个虚拟文件系统,提供了与内核、设备驱动程序和硬件相关的详细信息。它用于在用户空间与内核进行交互。- 例子:
/sys/class/net:包含所有网络接口的信息,如eth0、wlan0等。/sys/block:提供关于块设备的信息,如硬盘、分区等。/sys/devices:提供系统硬件设备的信息。
3. /dev 目录(其他节点):
- 除了
/dev/fd,/dev还包含了其他一些设备节点,用于与硬件进行交互或提供设备状态。 - 例子:
/dev/sda:表示第一个 SCSI 磁盘或 SATA 硬盘。/dev/tty*:表示终端设备。/dev/null:表示丢弃任何写入的数据的设备。
4. /proc/mounts 或 /etc/mtab:
- 这些文件显示当前挂载的文件系统的信息,包括文件系统类型和挂载位置。
5. /dev/ptmx 和 /dev/pts/:
/dev/ptmx和/dev/pts提供对伪终端(PTY)的访问,通常与远程登录、终端会话和进程通信相关。
6. /run 目录:
/run用于存储运行时数据,如进程的 PID 文件、锁文件等,提供运行中的系统状态。
小结:
这些虚拟节点提供了丰富的计算机和操作系统信息,用户可以通过读取或写入这些文件来查询系统状态、调试问题,甚至控制某些硬件设备。它们在本质上是虚拟的,不占用物理存储空间,但却提供了大量有用的实时数据。
二、测试工具
1. glxgears-3D
齿轮(glxgears)是一个简单的 OpenGL 渲染器,用于测试 3D 图形的性能。在 Linux 系统中,你可以按照以下步骤下载并安装齿轮:
- 打开终端:在 Linux 中,按下
Ctrl + Alt + T组合键来打开终端。 - 安装 Mesa 工具包:输入以下命令来安装 Mesa 工具包:
sudo apt-get install mesa-utilsMesa 工具包是一个 OpenGL 实现,它提供了许多有用的工具,包括齿轮。
- 运行齿轮:在终端中输入以下命令来运行齿轮:
glxgears这将会启动齿轮应用程序,并显示一个旋转的齿轮。你可以通过关闭应用程序来停止它。
请注意,齿轮并不是一个严格意义上的性能测试工具,因为它只是简单地旋转一个齿轮,而不涉及任何复杂的场景或纹理。因此,它只能提供一个粗略的性能估计。如果你需要一个更全面的性能测试工具,可以考虑使用更专业的测试软件,如 Unigine Heaven 或 3DMark。
- 相关使用:
vblank_mode是一个用于控制垂直同步(V-Sync)行为的环境变量。在使用glxgears这样的 OpenGL 应用程序时,设置vblank_mode可以影响渲染帧的显示方式。 vblank_mode=0:禁用垂直同步。在这种模式下,glxgears会尽可能快地渲染帧,可能导致屏幕撕裂,因为帧的更新与显示器的刷新率不同步。vblank_mode=1:启用垂直同步。在此模式下,渲染帧会在显示器的垂直刷新期间更新,从而减少或消除屏幕撕裂现象。不过,这可能会限制帧率到显示器的刷新率,导致某些情况下的性能下降。
总结来说,vblank_mode=0 优化了性能,但可能会有撕裂,vblank_mode=1 则提供更平滑的视觉效果,但可能牺牲一些性能。
2. glmark2-3D
glmark2 使用的 OpenGL 和 OpenGL ES API 进行测试,提供了一系列的渲染场景和测试选项,旨在评估计算机系统的 3D 图形渲染能力。
注意,glmark2 通过测试帧率(FPS)和性能得分,对系统的图形处理能力进行评估和比较。但主要用于比较不同系统或硬件之间的图形性能差异,并不一定代表实际应用程序的性能。在使用 glmark2 进行测试时,需要注意测试环境的一致性和可比性。
要在Ubuntu系统上安装 glmark2,可以按照以下步骤进行操作:
- 打开终端(Terminal)应用程序。你可以通过按下
Ctrl+Alt+T快捷键来打开终端。 - 在终端中运行以下命令,以更新软件包列表和依赖关系:
sudo apt update
- 安装 glmark2 软件包:
法一:通过包管理器安装
sudo apt install glmark2
法二:通过源代码编译安转(kylin系统实操推荐)
首先,确保你的系统上安装了必要的编译工具和依赖项。通常需要安装 git、cmake、gcc、make 等工具,以及 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
- 安装完成后,你可以在终端中运行
glmark2命令来启动 glmark2 基准测试程序。
glmark2 会执行一系列的图形测试,并显示性能得分和帧率等信息。你可以根据需要选择不同的测试选项,例如 glmark2、glmark2-es2 或 glmark2-es2-wayland 等。具体的选项可以通过运行 glmark2 --help 命令来查看。
请注意,在运行 glmark2 之前,确保你的系统已经安装了正确的显卡驱动程序,并且显卡支持所需的 OpenGL 版本。否则,可能会出现兼容性问题或无法运行的情况。
3. clpeak
clpeak 是一个用于评估 OpenCL 设备性能的工具,可以测试和比较不同 OpenCL 平台(如 GPU、FPGA 等)的性能。下面是下载、编译和安装 clpeak 的基本步骤:
- 下载
clpeak
你可以从 clpeak 的 GitHub 仓库下载源代码:
git clone https://github.com/krrishnarraj/clpeak.git
- 编译
clpeak
进入 clpeak 源代码目录,并执行以下步骤编译:
cd clpeak mkdir build cd build cmake .. make
这些命令依次做了什么:
cd clpeak: 进入clpeak源代码目录。mkdir build: 创建一个名为build的构建目录,用于在其中进行编译。cd build: 进入构建目录。cmake ..: 运行 CMake 以生成 Makefile。..表示 CMake 使用上级目录的CMakeLists.txt文件。make: 使用生成的 Makefile 编译clpeak。
- 安装
clpeak
clpeak 编译完成后,可以在构建目录中找到生成的可执行文件 clpeak。你可以选择将其复制到你喜欢的位置,例如 /usr/local/bin,以便全局访问:
sudo cp clpeak /usr/local/bin
- 运行
clpeak
完成安装后,可以通过简单运行 clpeak 命令来测试 OpenCL 平台的性能:
clpeak
这将列出系统中所有可用的 OpenCL 设备,并显示它们的性能指标,如运算性能、内存带宽等。
注意事项
- 确保你的系统已经安装了 OpenCL 运行时和驱动程序,以便
clpeak可以正确识别和测试设备。 - 如果你遇到编译问题或依赖错误,请根据系统和环境进行适当的调整和安装。
通过这些步骤,你应该能够成功下载、编译和安装 clpeak,并使用它来评估你的 OpenCL 设备的性能。
3. firmware固件
固件(Firmware) 是指嵌入到计算机硬件中的软件,它通常是操作硬件设备所必需的低级控制程序。固件在设备的内存中,通常是只读的(或可更新的),并且负责直接控制和管理硬件设备的功能。
固件程序段的内容:
- 引导程序(Bootloader):
- 这是固件的起始部分,负责初始化硬件和引导系统启动。它通常是设备开机时首先执行的程序。
- 驱动程序:
- 固件中包含了设备硬件的驱动程序,这些程序用于控制和操作硬件部件,比如处理器、内存、输入/输出接口等。
- 设备配置:
- 固件负责配置和初始化设备的各个部分,比如设置时钟频率、配置通信接口、调整电源管理等。
- 通信协议:
- 固件实现了设备与其他系统或设备之间通信的协议,例如串行通信、USB协议等。
- 应用逻辑:
- 某些固件还包含了设备的应用逻辑,例如在嵌入式系统中,固件可能实现了特定的功能如传感器数据处理或控制任务。
- 错误处理:
- 处理硬件或通信错误的机制,确保设备在出现问题时能够采取适当的措施,避免崩溃或数据丢失。
- 更新机制:
- 支持固件更新的功能,以便可以通过新的版本修复漏洞或增加新功能。
固件的作用:
- 硬件控制:
- 固件直接控制硬件设备的操作,确保硬件能够按预期运行。
- 系统启动:
- 负责设备的启动过程,包括加载操作系统或应用程序。
- 功能实现:
- 实现设备特定的功能,例如在打印机中控制打印任务,或在路由器中处理网络流量。
- 稳定性和兼容性:
- 确保硬件和软件的稳定性和兼容性,减少系统崩溃和错误发生的概率。
固件的设计和实现需要对硬件有深入的理解,因为固件必须与硬件紧密配合。
三、驱动包
1. Xorg中的三个包
这里是对这三个包的详细说明:
xserver-xorg-video-amdgpu:这是一个 Xorg 服务器驱动程序包,用于支持基于 AMD GPU 的显卡设备。它提供了与 AMD 显卡硬件通信所需的功能和接口。xserver-xorg-video-ati:这也是一个 Xorg 服务器驱动程序包,用于支持基于 ATI(现已归并入 AMD)GPU 的显卡设备。它提供了与 ATI 显卡硬件通信所需的功能和接口。然而,值得注意的是,从 Ubuntu 18.04 开始,AMDGPU 驱动已成为默认的开源驱动选择,因此在最新版本的 Ubuntu 中,xserver-xorg-video-ati包通常不再被推荐使用。xorg-server:这是 X Window System 的服务器端实现,也被称为 Xorg 服务器。它是一个开源的图形显示服务器,负责管理输入设备(如键盘、鼠标)和输出设备(如显示器)之间的通信,以及处理图形渲染和窗口管理等任务。xorg-server提供了通用的框架和接口,使得各种显卡驱动程序能够与 Xorg 服务器进行交互,并提供图形显示功能。
联系:
xserver-xorg-video-amdgpu和xserver-xorg-video-ati都是 Xorg 服务器的显卡驱动程序包,它们旨在支持不同系列的 AMD 显卡设备。它们的目标都是提供适当的接口和功能,从而使 Xorg 服务器能够与相应的显卡硬件进行交互。xorg-server是 Xorg 服务器本身,它是一个通用的图形显示服务器,可以与多种显卡驱动程序进行配合。
区别:
xserver-xorg-video-amdgpu和xserver-xorg-video-ati针对的是不同的 AMD 显卡系列。前者主要支持新一代的 AMDGPU 驱动程序,后者则支持旧一些的 ATI 驱动程序。xserver-xorg-video-amdgpu和xserver-xorg-video-ati是作为 Xorg 服务器的插件或模块提供的,它们需要依赖xorg-server来运行。而xorg-server则是整个 X Window System 的核心组件。
本人工作中常用的三包区别:
- Linux kernel是操作系统的核心,负责所有硬件的管理;
- xorg-server是一个图形服务器,提供图形用户界面的基础;
- xserver-xorg-video-amdgpu是针对特定显卡(AMD)的驱动,负责图形输出和处理。
3. 火焰图 FlameGraph
火焰图(Flame Graph)是一种可视化工具,主要用于分析和展示程序运行时的采样数据,特别是用于CPU性能分析。通过火焰图,可以直观地看到程序的性能瓶颈,识别出占用大量CPU时间的代码路径。以下是分析火焰图结果的一些要点:
(1)理解火焰图的结构:
- X轴(水平轴):代表不同的代码路径或调用栈。每个矩形表示一个函数调用,宽度表示该函数在总样本中的比例。
- Y轴(垂直轴):代表调用栈的深度。下往上看,可以追踪一个函数是被哪些上层函数调用的,从而了解整个调用链条。
(2)热点识别:
- 火焰图最重要的应用是识别性能热点。如果某个矩形(函数调用)特别宽,说明该函数占用了较多的CPU时间,是一个潜在的性能瓶颈。
- 关注火焰图中最大的、最宽的“火焰”,这些通常是你需要优化的地方。
(3)颜色含义:
- 一般情况下,火焰图的颜色并没有特定的含义,只是为了区分不同的函数。
(4)过滤和聚焦:
- 大多数火焰图工具允许你对某些部分进行放大、过滤或者聚焦。这对于大型应用程序尤为重要,因为它们的火焰图可能非常复杂。
- 你可以通过这种方式专注于某个子树或者特定的代码路径,进行详细分析。
(5)结合代码分析:
- 在识别出性能热点之后,往往需要回到具体的代码中,检查相应的函数实现,寻找可能的优化点。
- 有时候,性能瓶颈可能是由于算法效率低下、资源争用、高频率的I/O操作等问题导致的,需要具体问题具体分析。
总之,通过火焰图,你可以直观地看到程序执行过程中各个函数所占用的CPU时间,从而找到性能瓶颈,进行针对性的优化。
在Kylin系统上运行火焰图的过程大致如下:
- 安装必要工具
首先,在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
- 收集性能数据
使用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的文档或手册来了解更多参数选项,并根据需要进行配置。
- 生成火焰图
接下来,使用perf工具将性能数据转换为可以生成火焰图的格式。
sudo perf script > out.perf
然后,使用 FlameGraph 工具将 perf 数据转换为火焰图。
cd FlameGraph ./stackcollapse-perf.pl out.perf > out.folded ./flamegraph.pl out.folded > flamegraph.svg
- 查看火焰图
生成的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和其他一些性能分析工具。 - 确保目标程序在收集数据期间有足够的负载,以便生成有意义的火焰图。
4. 内核模块修改操作
此处主要讲命令sudo depmod -a、命令sudo update-initramfs -kuname -r-u和命令lsinitramfs /boot/intrd.img的作用及使用场景。
这三条命令分别是与 Linux 系统的内核模块和 initramfs (初始化文件系统) 相关的命令。每条命令的作用不同,但它们通常在某些操作系统更新或维护过程中一起使用,尤其是在内核更新后。让我们逐一分析它们的作用及使用场景:
1. sudo depmod -a
作用:
depmod是一个工具,用于生成内核模块依赖关系表。它扫描当前系统的内核模块并生成一个文件,记录内核模块之间的依赖关系。这个依赖关系表通常保存在/lib/modules/$(uname -r)/modules.dep文件中。-a选项意味着生成所有模块的依赖关系。
何时使用:
- 通常在安装新的内核模块或内核版本时,运行此命令可以更新模块的依赖关系表。
- 如果你安装了新的驱动程序或编译了新的内核模块,你需要运行
depmod以确保内核能正确加载这些模块并解决它们之间的依赖。
2. sudo update-initramfs -k \uname -r` -u`
作用:
update-initramfs是用于更新 initramfs(初始内存文件系统)镜像的工具。-k \uname -r`表示指定当前正在运行的内核版本(通过uname -r命令获取)。-u` 参数表示更新现有的 initramfs 镜像,而不是重新生成它。initramfs是一个包含必要驱动程序和配置文件的文件系统映像,在 Linux 启动时会加载到内存中,帮助系统引导。
何时使用:
- 当更新内核时,通常需要更新或重新生成 initramfs,以确保新的内核能够正确识别硬件并加载所需的驱动程序。
- 如果在内核中添加了新的模块,或者对系统做了更改(比如安装了新硬件驱动),你也可能需要使用
update-initramfs来更新 initramfs。
3. lsinitramfs /boot/initrd.img
作用:
lsinitramfs命令用于列出 initramfs 文件内容。它可以查看initrd.img或initramfs镜像内的文件和目录结构。- 这个命令能帮助你验证 initramfs 中是否包含了你期望的文件,尤其是在你更新或更改了内核模块时。
何时使用:
- 你可能在检查或调试 initramfs 镜像的内容时使用此命令。如果你想确认某些文件是否正确包含在内存文件系统中,或者想查看引导过程中的文件结构,它非常有用。
- 这三条命令的连续使用场景:
在内核更新、模块添加或硬件更改后,通常会按以下顺序执行这些命令:
sudo depmod -a:首先更新内核模块的依赖关系表,确保新的或修改过的模块可以被正确加载。sudo update-initramfs -k \uname -r` -u`:接着更新 initramfs,确保它包含与当前内核兼容的驱动和配置。lsinitramfs /boot/initrd.img:最后,可以使用lsinitramfs命令来检查更新后的initramfs文件,确认相关文件是否正确存在。
总结:
这三条命令通常在内核更新后一起使用,目的是确保新内核和相关模块能够正确加载,并且系统能够使用最新的初始化文件系统镜像。
四、常见操作
1. 禁用集显
- 两种方式:
第一种,bios禁用集成显卡;第二种,修改grub配置文件(内核引导参数)禁集显。
前者是直接从硬件上禁用,使系统识别不到集显;后者是移除集显的驱动,使它无法加载,也可以达到禁用的目的。 - 具体操作:
- bios禁用集显:不同固件禁用操作略微不同,可自行百度。
样例:开机按delete进bios,进入display,选择显示优先顺序为独显。 - 修改内核引导参数禁用:
(法一,kylin服务器使用过)
- 首先确认台子存在集显和独显(其他显卡亦可)
lspci | grep VGA
- 查看集显具体信息
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表示显示更详细的信息。
- 查看此时运行的内核的命令行参数:
cat /proc/cmdline
- 修改内核引导参数,即grub配置:
vim /boot/efi/EFI/kylin/grub.cfg
在module_blacklist=phytium_mci_pci后添加内容”module_blacklist=phytium_mci amdit=0″(若有某一部分则该部分无需添加)(目的是将集显加入黑名单)
- 重启系统以应用新的内核引导参数,禁用集成显卡。
(法二,可能有效,没试过)
- 以管理员身份编辑配置文件。你可以使用以下命令打开 GRUB 配置文件进行编辑:
sudo vim /etc/default/grub
- 找到
GRUB_CMDLINE_LINUX_DEFAULT行,该行包含内核引导参数。将其修改为包含video=disconnected参数,例如:
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash video=disconnected"
- 保存文件并关闭编辑器。然后更新 GRUB 配置,使更改生效。运行以下命令:
sudo update-grub
- 重启系统以应用新的内核引导参数,禁用集成显卡。
请记住,具体操作可能会因操作系统版本和配置而有所不同,建议在操作前做好备份并确保了解自己系统的相关信息。
2. 接串口看信息
- 用串口线(含3端:TX、RX、GND)接上主板上标有CPU_UART的三个针孔。
注意:一般情况下除了串口地线GND对应主板GND,其他两个反着接。即串口GND-主板GND,串口TX-主板RX,串口RX-主板TX。
3. 将所有信息实时打印到串口
- 打开
/etc/default/grub文件,找到GRUB_CMDLINE_LINUX_DEFAULT行,并在其中添加一个参数console=ttyS0,n1 loglevel=7。这个参数指定了将系统控制台输出重定向到串口设备 ttyS0,波特率为 ,并将log信息详细程度开到最大7。例如:GRUB_CMDLINE_LINUX_DEFAULT="quiet splash console=ttyS0,n1 loglevel=7" - 打开
/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,n1,以便将输出重定向到串口设备。例如:
if [ -z "${recovery_mode}" ] ; then echo " linux ${rel_dirname}/${basename} root=${linux_root_device_thisversion} ro ${args} console=ttyS0,n1" else echo " linux ${rel_dirname}/${basename} root=${linux_root_device_thisversion} ro single ${args} console=ttyS0,n1" fi
保存文件并退出。
- sudo权限看
/boot/grub.cfg实际文件是否修改成功:
sudo su vim /boot/grub.cfg
- 运行以下命令更新 grub 配置:
sudo update-grub - 重新启动系统,内核信息将会被输出到串口设备 ttyS0 中。如果你使用的是串口终端软件,可以通过该软件查看输出信息。
注意:请确保你的系统已经连接了串口设备,并且该设备已经正确设置。
法二:修改BIOS界面配置(本质相同,单次生效)
如图,按e进入编辑,此处一条一条的内容即为配置文件中menu_entry函数实现。
加入相关参数:
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash console=ttyS0,n1 loglevel=7"
Ctrl+s保存后登陆系统,即可见串口打印了内核等的相关信息。
4. 制作系统安装U盘
- 打开Refus,选好如下图选项后开始制作,
- 完成后将U盘插入台子,BIOS设置启动顺序优先u盘,开始安装系统,安装好后拔出U盘重启即可。
linux使用dd命令
需要:U盘、系统镜像、linux系统机器
操作:
- 插U盘前后,用
df -h查看所有存储设备及其挂载点,从而确定 U 盘的设备路径(如/dev/sdX)。(命令lsblk或fdisk -l也可) - 如果你的u盘被分成多个分区了,你需要全部umount, 命令为
sudo umount /dev/sdb1 - 使用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专用的信号,它接收到该信号,就会显示刻录的进度。 - 当刻录结束后,运行
sync
该命令是检查一下,刻录是否运行完毕,当sync结束后,就可以安全的拔出u盘了。(sudo eject /dev/sdX)
5. ip配置注意事项
- IP地址冲突检查
检查IP地址是否与其他设备冲突
arp -a | grep <IP地址>
如果输出中有对应的MAC地址,则表示存在IP地址冲突。
- 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
- network服务重启
ip配置好后需要重新network:
sudo systemctl restart network/networking
- 防火墙状态检查
图像界面看防火墙设置是否关闭。下面命令方法暂未验证。
sudo systemctl status firewalld
如果防火墙已关闭,则输出将显示 inactive。
- 网络配置文件静态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地址配置。
- 网口状态检查
以上事项都没问题但不能互ping通,则考虑是不是网口坏了,换换网线、网口。 - 互ping通但xshell连不上
排除xshell问题后,图像界面切换成单/多用户模式,则能连上。(龙芯+uos遇到过,暂不清楚原因)
# 单次切换 sudo systemctl isolate multi-user.target # 默认自启动 sudo systemctl set-default multi-user.target
- 相关ip配置命令
(1)可设置ip(未深入了解)
ifconfig <网口名如eth0> <IP地址>
6. linux系统 – 单/多用户模式、图形界面(GUI)
在Linux系统中,单用户模式通常用于系统维护和故障排除,而多用户模式是正常的运行状态,允许多个用户同时登录系统,通常具有网络和其他服务的支持。
- 进入多用户模式
(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调试
以下着重讲二者区别:
两种调试方式的区别在于如何指定被调试的进程和可执行文件:
- sudo gdb -p
pidof Xorg:- 这种方式是通过进程ID(PID)来调试正在运行的进程。具体步骤是:
pidof Xorg命令会返回 Xorg 进程的 PID。sudo gdb -p <PID>将以超级用户权限启动 GDB,并附加到指定 PID 的进程(这里是 Xorg)上进行调试。
- 这种方式适合于已经在运行中的 Xorg 进程,例如,在桌面环境中。
- 这种方式是通过进程ID(PID)来调试正在运行的进程。具体步骤是:
- 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 在某些情况下可能无法直接启动或者会直接进入桌面环境)。
- 允许你在启动之前设置断点和进行其他调试准备工作。
- 需要知道可执行文件的确切路径,并确保你有权限访问该文件。
8. ccache提高编译速度
ccache 是一个编译缓存工具,用于加速 C/C++ 编译过程。它通过缓存之前编译过的代码的结果,避免重复编译相同的代码,从而提高编译速度和效率。以下是 ccache 的主要功能和特点:
- 缓存编译结果:
ccache会缓存编译的结果,以便在相同的源代码、编译器选项和预处理器宏条件下,重新编译时可以直接使用缓存中的结果,而不必重新编译。 - 加速编译:通过重用缓存的编译结果,
ccache可以显著减少编译时间,特别是在大型项目中,减少编译时间对开发效率的提升非常明显。 - 透明集成:
ccache可以与现有的编译工具链(如gcc、clang等)透明集成,只需将编译器调用替换为ccache gcc或ccache clang,就能启用缓存功能。 - 配置灵活:
ccache提供了多种配置选项,如缓存大小、缓存清理策略等,可以根据项目需求进行调整。 - 统计和分析:
ccache可以生成编译统计信息,帮助用户了解缓存的命中率、缓存的使用情况等,以便优化编译流程。
要使用 ccache,通常需要先安装它,然后配置编译系统使用 ccache 作为编译器的前置程序(本人实际修改驱动makefile.linux.def文件配置)。例如:
export CC="ccache gcc" export CXX="ccache g++"
这将使得 ccache 在调用 gcc 和 g++ 时生效,自动处理缓存。
五、行业认知
1. 主流BIOS制造商
国内主流的 BIOS 制造商包括以下几家:
- 华硕(ASUS):华硕是一家知名的计算机硬件制造商,也生产主板和 BIOS。
- 技嘉(GIGABYTE):技嘉是一家台湾的电脑硬件制造商,在主板领域有一定的市场份额,也生产 BIOS。
- 微星(MSI):微星是一家全球知名的电脑硬件制造商,主要生产主板、显卡等硬件,并提供 BIOS 支持。
- 华擎(ASRock):华擎是主板制造商,也提供相应的 BIOS 产品。
这些厂商在主板行业有一定影响力,他们生产的主板通常配备有各自定制的 BIOS。值得注意的是,随着技术的发展,UEFI 替代 BIOS 的趋势逐渐明显,越来越多的主板使用 UEFI 替代传统的 BIOS。
2. 窗口管理器 kwin、mutter、marco
- KWin:KWin是KDE桌面环境的默认窗口管理器,它负责管理窗口的布局、外观、动画效果等。KWin提供了丰富的窗口管理功能,包括窗口最大化、最小化、拖放、工作区切换等,同时也支持丰富的插件和扩展功能。
- Mutter:Mutter是GNOME桌面环境的默认窗口管理器,它负责管理窗口的显示、布局、交互等。Mutter使用Clutter库来实现硬件加速的图形渲染,同时也支持Wayland显示协议。
- Marco:Marco是MATE桌面环境的默认窗口管理器,它提供了基本的窗口管理功能,包括窗口装饰、移动、调整大小等。Marco旨在提供简洁而稳定的窗口管理体验,适合对性能要求较低的环境使用。
这些窗口管理器在不同的桌面环境中扮演着类似的角色,它们负责管理窗口的外观和行为,以及用户与窗口的交互。
参考来源
- dd命令使用:linux下使用dd命令写入镜像文件到U盘
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/111256.html
