- 博客(58)
- 资源 (3)
- 收藏
- 关注
原创 kernel 常用基础链表解析
4、一般我们的链表节点都是镶嵌到一个大结构体中,这样才能将每一个大结构体链接起来,形成一个链表,而上面我们取出了节点指针(位置),还需要获取大结构体指针(位置),这里就用上 list_entry ,可以获取链表节点的绝对位置 和 大结构体到链表节点相对位置,因为结构体成员的地址是从低到高增长,所以使用链表节点的绝对位置 减去 大结构体到链表节点相对位置,这样就能获取 chan 真实的地址,有了 chan 大结构体,我们可以获取大结构体中的其他信息。1、举个简单的函数例子,对例子进行分解。
2024-12-18 10:59:11
115
原创 系统引导文件 grub 异常、命令修复
2、开机后,系统无法正常启动,由于丢失 grub 引导文件,相当丢失了地图,grub 无法正常引导 kernel、initramfs 引导镜像。1、模拟当grub文件丢失或内容错误,导致系统无法正常启动,删除系统中 /boot/grub2/grub.cfg。5、找到系统分区后,查看当前系统分区的 UUID 信息,重点看 /boot 分区 和 / 分区。7、此时系统能顺利进入系统,需要重新生成一下 grub 文件。3、进入 grub 系统调试模式,手动设置引导文件位置。6、grub 中手动设置文件路径。
2024-09-19 15:59:10
628
原创 rpmbuild 将二进制文件 strip,文件 md5 发生改变
发现丢失了 debug_info,这是因为 rpmbuild 打包时一般会把 debug 信息提取出来,然后单独放入到一个 xxx.debuginfo.rpm,看一下当前环境中宏定义。在编译或打包环境中,莫名其妙的文件 大小 md5 都发生了改变,怀疑跟 rpmbuild 打包有关。是给 STRIP 进行赋值,代表 $1 参数是否存在,如果不存在则使用。上一篇中提到 strip 相关的操作,会去掉文件中的调试信息。说明去除了二进制文件的调试信息,原文件与打包后解压文件对比。
2024-08-15 11:30:41
301
原创 UEFI 启动原理及qemu 虚拟化中使用
计算机启动时会加载 BIOS,以初始化和测试硬件功能。它使用 POST 或 Power On Self Test 来确保硬件配置有效且工作正常,然后寻找存储引导设备的 MBR(Master Boot Records),并使用它来启动引导加载程序,然后是内核,然后操作系统。所有这些在 BIOS 上的启动过程都称为 Legacy Boot,下面简单介绍一下 BIOS 上的启动过程。BIOS 被认为是旧的和过时的固件,尽管总会有人使用它。
2024-06-21 15:16:14
2723
原创 virsh 快速复制一个虚拟机
对 hc2.xml 做修改,主要修改名称、uuid、新磁盘路径、网络(这部分不是绝对,根据需求增删改)由于环境中的 ip 是需要重新修改,我这里要对新虚拟机网络做以下调整(针对同一台主机修改网络配置)复制一份镜像文件,复制一份虚拟机 xml,等新虚拟机去使用。在很多测试环境中,想快速复制一个虚拟机,如何实现?假如环境中已有一个虚拟机,查看虚拟机磁盘信息。
2024-03-05 11:27:48
928
原创 rpmrebuild 重新制作 rpm
4、find / -name aaa (一般在/root/.tmp/rpmrebuild.xxx)2、此时我们得到一个交互shell,重新制作 rpm 有两种方式。5、尽情发挥吧,完了退出。
2024-02-28 17:22:28
821
原创 structure needs cleaning结构需要清理
如果是在系统盘出现这个问题,那么一定要重启服务器进入单用户模式(安全模式)了,重启之前你要清楚故障的分区是哪一个,可以通过lsblk查看当前/根目录对应的分区,我这里是/dev/sda4。开机启动菜单选项按e,找到ro,将ro替换为rw init=/sysroot/bin/sh,并按ctrl+x进入。这么操作是没有问题的,那么问题来了,我这里是属于/根目录无法删除的问题,根怎么umount卸载修复呢?在网上搜索一下,你会发现千篇一律的卸载磁盘挂载,然后进行挂载修复。
2023-11-07 11:28:10
6398
1
原创 dracut添加指定固件
存放在,固件来自kernel 仓库更多的固件可以参考git仓库,https://git.kernel.org/pub/scm/linux/kernel/git/firmware/linux-firmware.git/plain想要获取固件,无论是从仓库或者浏览器中下载你所需要的固件,支持多种系统固件,可以参考,https://git.kernel.org/pub/scm/linux/kernel/git/firmware/linux-firmware.git。
2023-10-30 17:10:07
731
原创 linux 开机开启emergency mode
按下 ↓ 按键,并找到以单词 linux 开头的一行代码,并在其结尾处添加下面的一行代码。为到达其结尾处,只需要按下 Ctrl + e 组合键,或使用你键盘上的 END 按键或 ←/→ 按键。
2023-10-25 15:29:20
423
原创 docker基本用法
镜像方式1方式2docker方式一 (推荐)方式二将宿主机文件到容器中添加,基于容器创建镜像,保存历史合并新层,基于容器创建(创建新镜像)查看docker的导出镜像到一个文件,不带历史,基于容器创建(迁移容器)导出镜像到指定文件(分享镜像)就是说如果用export指令导出,镜像历史提交记录就没了;但是用save,历史提交记录还在导入指定文件为镜像可以依据具体使用场景来选择命令若是只想备份images,使用save、load即可。
2023-10-09 11:34:46
191
原创 公钥、私钥、签名、证书-一文全解释
CA选项指明用于被签名的csr证书,-CAkey选项指明用于签名的密钥,-CAserial指明序列号文件,而-CAcreateserial指明文件不存在时自动生成。为了生成这样的密钥,需要一个至少四位的密码。CSR文件必须有CA的签名才可形成证书,可将此文件发送到verisign等地方由它验证,要交一大笔钱,何不自己做CA呢。在制作csr文件的时,必须使用自己的私钥来签署申,还可以设定一个密钥。crt是CA认证后的证书文,(windows下面的,其实是crt),签署人用自己的key给你签署的凭证。
2023-08-31 15:08:21
1250
原创 emergency mode 处理
本节操作适用于Linux操作系统emergency mode(紧急模式)问题处理。操作步骤涉及修复文件系统操作,修复文件系统存在丢失数据风险,请先备份数据后进行修复操作。
2023-08-22 10:49:07
1922
原创 linux 系统 最详细 启动流程
Linux在完成核内引导(已经被载入内存,开始运行,并已初始化所有的设备驱动程序和数据结构等)之后,就通过启动一个用户级程序init的方式来启动其他用户级的进程或服务.所以,init始终是第一个进程,其PID始终为1(ps -aux | less),它是系统所有进程的父进程.内核会在过去曾使用过init的几个地方查找它,它的正确位置(对Linux系统来说)是/sbin/init.如果内核找不到init,它就会试着运行/bin/sh,如果运行失败,系统的启动也会失败.
2023-06-29 14:39:41
2320
原创 如何进入到 initramfs 小系统中
如何进入initramfs shell?在GRUB引导菜单上按e,进入编辑模式。跳转到linux开头的行,把UUID=后面的任一字母数字改错。按F10启动,等一段时间,initramfs就会找不到根文件系统,于是就会陷入initramfs shell。该shell具有root权限。如果显示了发行版Logo,通常只要按esc就能取消Logo显示日志有什么用可以获得root shell,不需要密码和sudo。在该shell内手动挂载根文件系统就可以对系统进行修改。如何挂载根文件系统。
2023-06-12 18:16:10
1881
原创 initramfs 最全解释与制作
我们都知道 initramfs 是系统启动时加载,其中的 lib/modules 中包含必要的设备驱动(磁盘、网卡、文件系统等)及运行环境C库/动态库链接器等, 先启动一个临时系统,然后会再 switchroot 时加载,用的是initramfs 相关驱动,在 switchroot 后,用的是硬盘上的非必须驱动,有些 ko 虽然放到 initramfs 中,但是 switchroot 前不加载的话,用的还是硬盘上的,关键看 ko 加载时机。1、initrd 和 initramfs 有什么区别?
2023-06-12 16:31:39
4010
原创 制作 initramfs 后,缺少部分驱动,可能导致系统无法启动
通过 mkinitrd 制作出来的 initrd.img 镜像,替换到 ISO 中,系统无法正常启动,从日志上看 mount ‘iso9668’ 失败,怀疑是小系统中缺少 isofs 驱动导致。因为使用 mkinitrd /boot/initramfs.img $(uname -r) 时没有指定加载的内核模块,需要重新制作 initrd.img,添加一些参数 --whth=isofs。注:这种方式也适用于自己添加了新驱动,当没有打入 initramfs 可以去指定模块。
2023-06-12 14:52:51
694
原创 nfs 服务器超简单搭建,iptables 开放 nfs 端口
*原理:**默认情况下,各种NFS服务(lockd、statd、mountd等)将从portmapper (portmap)请求随机端口分配,这意味着大多数管理员需要在他们的防火墙规则库中开放一系列端口以使NFS工作,我们可以固定使用的端口,方便 iptables 开放限制。**使用条件:**iptables 限制端口后,无法成功 mount nfs,需要开启 nfs 使用的端口。固定nfs 端口:vim /etc/sysconfig/nfs。创建共享目录:/data/nfs_share。
2023-03-14 17:06:25
1373
原创 麒麟 docker 自启动失败
2、对比centos /lib/system/systemd/ 配置发现有TimeoutSec=0,可以通过修改/lib/system/systemd/docker.service 方式,使超时时间无穷大。在/etc/systemd/system下面创建docker.service.d目录,在这个目录里面新建任何以.conf结尾的文件,然后写入我们自己的配置。在/etc/systemd/system目录下创建docker.service文件,里面写上我们自己的配置。自启动时出现超时问题。
2023-01-05 15:11:48
1287
原创 libvirt 使用UEFI 设置 edk2-ovmf
英特尔EFI开发工具包II (edk2)的子项目,所以在edk2 源码中也能找到 ovmf 部分,ovmf 使UEFI支持Ia32和X64虚拟机。2、OVMF_CODE 是 bootloader 镜像文件,而 OVMF_VARS 是保存OVMF_CODE 中变量的文件;2、UEFI:虚拟机XML 会使用OVMF_CODE.secboot.fd 和 OVMF_VARS.fd 文件去启动。1、UEFI:虚拟机XML 会使用OVMF_CODE.fd 和 OVMF_VARS.fd 文件去启动。
2022-11-15 18:50:31
2669
原创 kickstart 报错
为什么hs 打包没有这个错误,对比 hs和 kylin 两个 ksvalidator 版本区别。提示说 新版本用 timesource --ntp-disable 来取代 --nontp。在麒麟环境下打包,使用 ksvalidator 检测 kickstart 文件时报错。kylin pykickstart 版本更高。
2022-10-25 20:21:38
484
原创 linux kernel主要文件-图文讲解
内核在线阅读:https://elixir.bootlin.com/linux/latest/source内核官网:https://www.kernel.org/内核编译:make安装内核和模块:make module_install install其他:make mrprobe(每次配置,并重新编译内核前,先执行"make mrproper",清理源代码树,包括清理过去的内核配置文件".config",);make dep(生成内核直接的依赖关系,为编译做好准备)config。
2022-09-04 13:54:50
1170
原创 is filtered out by modular filtering
[root@c libvirt-build]# dnf install -y gcc-c++Last metadata expiration check: 0:00:14 ago on Tue 23 Aug 2022 05:03:23 AM CST.Detection of Platform Module failed: No valid Platform ID detectedAll matches were filtered out by modular filtering for argumen
2022-08-23 13:37:00
2918
原创 python 基础学习-知识汇总
这种命名方式里面,后面的loggers是前面logger的子 logger,自动继承父loggers的log信息,正因为此,没有必要把一个应用的所有 logger都配置一遍,只要把顶层的logger配置好了,然后子logger根据需要继承就行了。但执行yield语句,返回的是一个生成器对象,而且这个生成器对象的当前值,就是yield语句后面跟的表达式的值。当对象被创建时, 就创建了一个引用计数, 当这个对象不再需要时, 也就是说, 这个对象的引用计数变为0 时, 它被垃圾回收。相比print,具备。
2022-08-21 13:53:10
1132
原创 xshell7 登录脚本 设置跳板机
在实际开发或生产环境,经常会出现跳板机,手动执行比较麻烦,故进行如下两步设置即可:第一步在中将跳板机的 IP 填入到连接中,我实验的跳板机是 ,需要跳转到的服务器为第二步
2022-08-06 16:11:37
728
原创 CentOS 8 系统时间显示问题
时间显示问题时区确认timedatectl 先确认当前时区为亚洲/上海的时区[cookie@192 ~]$ timedatectl Local time: Sat 2022-03-19 09:35:40 CST Universal time: Sat 2022-03-19 01:35:40 UTC RTC time: Sat 2022-03-19 01:35:40 Time zo
2022-03-19 09:56:20
581
原创 gdb调试大全
文章目录GDB调试gdb基本命令汇总调试可执行文件调试core文件gdb断点调试GDB调试gdb基本命令汇总commandfile <文件名>加载被调试的可执行程序文件run单步执行,运行程序,停在第一执行语句如果可执行程序需要传参,可写在run后面list查看源代码,简写lset设置变量的值next单步调试(不进入的单步执行,函数直接执行),简写nstep单步调试(跳入自定义函数内部执行,使用finish退出该函数的调用函数)
2022-03-10 18:03:16
1040
原创 keepalive心跳包
static int setup_ip_heartbeat(int fd){ int ret = -1; // open keepalive on fd int alive = 1; ret = setsockopt(fd, SOL_SOCKET, SO_KEEPALIVE, &alive, sizeof(alive)); if(ret < 0) { perror("setsockopt:"); return -1;
2021-03-19 10:45:59
226
原创 编译源码pkg-config报错问题(configure\pkg-config\PKG_CONFIG_PATH关系)
编译源码pkg-config报错问题:…d libraries… yeschecking dynamic linker characteristics… (cached) GNU/Linux ld.sochecking how to hardcode library paths into programs… immediatechecking for pkg-config… /usr/bin/pkg-configchecking pkg-config is at least version 0.
2021-01-31 13:37:54
6970
原创 小米嵌入式工程师面试-心得
小米Linux嵌入式C工程师面试-心得前言:今年有幸参加小米的面试和笔试,大学刚毕业那一会儿,特别想进小米,但是投的简历都打水漂了,估计网申没过把。想进小米,主要因为个人原因,我的第一部智能手机就是小米2,后来用小米4、小米5,可以说这是最初的梦想吧。面试流程:网上投简历,通过网申,安排线下面试,项目提问,基础知识掌握程度,笔试面试地点:小米科技园项目问答部分:1、问的很详细,每一个项目都会逐一问答,不过这些都可以说流畅的讲出项目的架构和原理,不过具体太深的地方就有点力不从心了,面试官会一直往
2020-12-09 23:04:41
5820
2
iperf3-tools带宽测试工具(兼容安卓)
2020-07-09
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人