PCIE软件相关基础知识
什么是PCIE
PCIe,全称 Peripheral Component Interconnect Express,是一种高速串行计算机扩展总线标准,用于连接计算机内部的硬件组件,如显卡、存储设备、网络适配器等。PCIe是一种点对点的双向通信标准,这意味着它在发送和接收方向上都提供专用的信道,与传统的PCI总线相比,PCIe提供了更高的带宽和更低的延迟。
PCIE设备长什么样
比如这是一张虚假的显卡
虽然上图内容是假的, 但还是很形象的.
带宽PCI Express (PCIe) 是一种高速串行计算机扩展总线标准,用于连接主板上的各种硬件组件,如显卡、存储设备和网络适配器等。PCIe带宽主要由以下几个因素决定:
版本:
PCIe 1.0:最初版本,每个通道的原始数据传输速率为2.5 GT/s(Giga Transfers per second),考虑到8b/10b编码的效率,实际数据传输速率为250 MB/s。
PCIe 2.0:将每个通道的原始数据传输速率翻倍至5.0 GT/s,实际数据传输速率为500 MB/s。
PCIe 3.0:再次将每个通道的原始数据传输速率翻倍至 ...
module_param_named 内核启动时模块参数实现原理
基于上节内核启动参数实现原理内容, 其中对early_param的实现流程做了分析, 已基本清晰. 但有不少的参数是在内核模块中声明的, 具体赋值流程也值得一探究竟.
nomodeset装过Linux系统的同学可能多少有看到过nomodeset这个参数, 解决一些显卡点不亮Linux的问题.
那么这个nomodeset是怎么生效的呢?
在内核代码中查找一下:
12345678910[mxd@5 linux-4.19-loongson]$ grep nomodeset -rnIw drivers/video/drivers/video/console/vgacon.c:116: pr_warning("You have booted with nomodeset. This means your GPU drivers are DISABLED\n");drivers/video/console/vgacon.c:118: pr_warning("Unless you actually understand what nomodeset does, yo ...
系统下查看一些信息
1. 查看系统版本123456789101112[root@mxd mxd]# cat /etc/os-releaseNAME="Arch Linux"PRETTY_NAME="Arch Linux"ID=archBUILD_ID=rollingANSI_COLOR="38;2;23;147;209"HOME_URL="https://archlinux.org/"DOCUMENTATION_URL="https://wiki.archlinux.org/"SUPPORT_URL="https://bbs.archlinux.org/"BUG_REPORT_URL="https://bugs.archlinux.org/"PRIVACY_POLICY_URL="https://terms.archlinux.org/docs/privacy-policy/"LOGO=archlinux-logo
2. 查看内核版本12[roo ...
生成系统下的一些文件
1. Initrd通常, lib/modules/下的文件夹名称和内核的版本名是一致的, 所以可以通过下列命令生成Initrd:
1.1 dracut命令1ls lib/modules/* | xargs -I N dracut --kver N --force
1.2 mkinitramfs命令1ls lib/modules/* | xargs -I N mkinitramfs /lib/modules/N -o /boot/initrd.img-N
2. GRUB2.1 Grub通常, Grub安装在当前启动系统所在的磁盘上, 如下命令可以找到当前磁盘. (希望将Grub安装在其他盘的同学, 看明白自己想要的效果)
12[root@mxd ~]# lsblk -P | grep "$(lsblk -P | grep -w 'MOUNTPOINTS="/"' | sed 's/.*MAJ:MIN="\([^:]*\).*/\1/g'):0" | awk -F '" ...
如何更新系统
1 全系统更新:Debian系:
1apt update && apt upgrade
Redhat系:
1yum update
Arch系:
1pacman -Syu
2. 单独更新内核2.1 更新自己编译的内核将内核放置/boot下即可(通常/boot是grub.cfg默认指定的根目录)
更新完记得更新grub.cfg, 见第四节.
2.2 更新软件源上的内核以Debian系为例, 其余不做演示:
123456789101112131415root@loongson-pc:/home/loongson# apt-cache search linux-headeraufs-dkms - DKMS files to build and install aufslinux-headers-4.19.0-17-common - Common header files for Linux 4.19linux-headers-4.19.0-17-loongson-3 - Linux kernel headers for 4.19 on loongson-3linux-he ...
从UEFI如何启动到系统
UEFI须知1. 进入UEFI setup界面在串口或者显示界面下显示BDS字样的时候(如下图), 稍微按按上下键即可进入Setup界面
2. Setup界面无论是Intel还是loongson, BIOS下都有设置的接口, PMON也有, 无非是显示样式差异, 原理相通. Loongson的UEFI界面如下图
不同的条目, 用于设置不同的功能. 其中普通用户通常只需要进入BootManager界面选择相应的启动目标即可.
3. BootManager界面在下图区域1中为条目名称, 区域2中为UEFI下解析的路径名(有点专业,不用理解), 总之, 左边看不懂时就看右边, 找相关的关键字, 比如下图, 左侧是设备名, 不太能看出是什么设备, 右侧则有Sata字样可以识别.
4. Shell下操作通常, 正常情况下, 系统直接启动, 用户无法感知上述界面的存在, 但当出现一些问题时, 我们可能需要进入Shell下进行操作, 如上图中的第二个条目, 选中后回车进入下图界面:
4.1. 显示启动设备正常情况下, 进入Shell后仍然会提示启动相关的设备, 如上图, 倘若由于操作过多, 或者显示 ...
Grub编译与调试
1. Grub编译1234git clone https://github.com/loongarch64/grub.gitcd grub./bootstrap./configure --with-platform=efi --target=loongarch64 --prefix=$(pwd) --disable-werror
2. Grub文件生成2.1 grub.efi1./grub-mkimage -p . -c /boot/mxd.cfg -d ./grub-core/ -O loongarch64-efi -o /boot/mxd.efi $(ls grub-core/ | grep -E "\.mod$" | cut -d "." -f 1 | uniq)
各参数可在help信息中查看.
2.2 grub.cfg1./grub-mkconfig -o /boot/mxd.cfg
除了生成grub.cfg外, 系统下还有一些用于参考的grub默认配置选项, 如: /etc/default/grub, /etc/grub.d等. ...
龙芯平台如何更新固件
在PMON下更新固件详情PMON使用方法
从硬盘加载:
123456789PMON> fload /dev/fs/usb0a/gz.mxdLoading file: /dev/fs/fat@usb0a/gz.mxd dl_offset 900000000f800000 addr 900000000f800000(bin)-Loaded 993222 bytesProgramming flash 900000000f800000:f27c6 into 800000001c000000Erase end!-Programming end!
从tftp服务器加载:
123456789PMON> fload tftp://192.168.1.4/gz.mxdLoading file: tftp://192.168.1.4/gz.mxd dl_offset 900000000f800000 addr 900000000f800000(bin)-Loaded 993222 bytesProgramming flash 900000000f800000:f27c6 into 80000 ...
PMON的使用方法
1. 查看设备1234PMON> devlssyn0wd0usb0
sync0, igb0, em0 等字样,表示网络设备, 即网卡
wd0, nvme0, usb0, cd0等字样表示存储设备, 即硬盘, U盘等.
2. 查看pci信息123456789101112131415161718PMON> pciscan>> BUS 0 <<Dev Fun Device description-------------------------- 0 0 vendor/product: 0x0014/0x7a00 (bridge, host, interface: 0x00, revision: 0x00)0x00000000:0x00000000 mem @0x00000000, 0 bytes 0 1 vendor/product: 0x0014/0x7a10 (bridge, host, interface: 0x00, revision: 0x01)0x00000000:0x00000000 mem @0x00000000, 0 b ...
early_param 内核启动参数实现原理
基于上节内核下PCIE的扫描流程内容, 其中有个early_param关键字, 对于启动内核时能够使用诸多参数, 本人早就非常好奇, 趁着这个机会学习一下.
early_param相关代码:
12345678910111213141516171819202122232425262728293031#define __initconst __section(.init.rodata)/* * NOTE: fn is as per module_param, not __setup! * Emits warning if fn returns non-zero. */#define early_param(str, fn) \ __setup_param(str, fn, fn, 1)#ifndef MODULEstruct obs_kernel_param { const char *str; int (*setup_func)(char *); int early;};/* * Only fo ...