驱动学习篇

驱动学习篇

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

一、知识点

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 系统的命名约定。如有需要,你可以参考特定发行版的文档以获取准确的软件包名称和相关信息。

四、常见操作

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,n1 loglevel=7。这个参数指定了将系统控制台输出重定向到串口设备 ttyS0,波特率为 ,并将log信息详细程度开到最大7。例如:

    GRUB_CMDLINE_LINUX_DEFAULT="quiet splash console=ttyS0,n1 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,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 

保存文件并退出。

  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,n1 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

五、行业认知

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盘

2024最新激活全家桶教程,稳定运行到2099年,请移步至置顶文章:https://sigusoft.com/99576.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。 文章由激活谷谷主-小谷整理,转载请注明出处:https://sigusoft.com/164266.html

(0)
上一篇 2024年 7月 4日 下午8:12
下一篇 2024年 7月 4日 下午8:16

相关推荐

关注微信