自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(54)
  • 收藏
  • 关注

原创 Linux内核启动中驱动初始化过程

Linux内核启动时驱动初始化过程一、驱动模块存在形式内核源码树中大部分内容为驱动代码,那么在内核中,每个驱动在内核编译时都是以如下的两种形式进行编译的:1、静态编译将驱动编译进内核;2、动态编译将驱动编译成可以在需要时动态插入到内核中的模块,即ko的形式;二、驱动内核初始化时是如何加载的?首先在do_initcalls中按照顺序依次加载内嵌驱动(串行),async_synchronize_full函数等待所有的async完成在向下执行;内核态,还未加载init进程 kernel_i

2022-01-22 11:02:37 2745 1

转载 Linux 设备驱动的固件加载-转载

      作为一个驱动作者, 你可能发现你面对一个设备必须在它能支持工作前下载固件到它里面. 硬件市场的许多地方的竞争是如此得强烈, 以至于甚至一点用作设备控制固件的 EEPROM 的成本制造商都不愿意花费. 因此固件发布在随硬件一起的一张 CD 上, 并且操作系统负责传送固件到设备自身.      硬件越来越复杂,硬件的许...

2022-01-14 17:53:44 794 1

转载 yum源中repodata目录下的各文件内容及作用-转载

服务端 repodata/ 目录下的一系列文件,就是yum能否自动解决依赖关系的关键。 repodata/   目录包含以下几部分: primary.xml.gz 、filelists.xml.gz 、other.xml.gz 、repomd.xml 、comps.xml    示例:yum安装ntpdat...

2022-01-10 16:47:40 1279

原创 Linux设备模型初始化流程

Linux设备模型初始化流程/* * Ok, the machine is now initialized. None of the devices * have been touched yet, but the CPU subsystem is up and * running, and memory and process management works. * * Now we can finally start doing some real work.. */static vo

2022-01-06 21:18:36 1220

转载 IO负载高的来源定位

本篇文章是一篇关于负载定位的帖子          媒介:     在一般运维任务中经常会碰到这么一个场景,服务器的IO负载很高(iostat中的util),但是没法倏地的定位到IO负载的起源程进和起源文件致使没法行进响应的略策来解决题问。     这个象现在MySQL上更为见常,在5.6(p...

2021-11-05 15:15:27 396

转载 kickstart详解

一、kickstart是什么   许多系统管理员宁愿使用自动化的安装方法来安装红帽企业 Linux.为了满足这种需要,红帽创建了kickstart安装方法.使用kickstart,系统管理员可以创建一个文件,这个文件包含了在典型的安装过程中所遇 到的问题的答案.   Kickstart文件可以存放于单一的服务器上,在安装过程中被独立的机器所读取.这个安装方法可以支持使用单一kickstart文...

2021-10-18 16:21:49 896

转载 ks.cfg配置详解

  Contents 1Chapter 1. 引言 1.1什么是Kickstart安装?1.2如何使用kickstart进行系统安装?1.3创建Kickstart文件1.4引用磁盘的特殊说明2Chapter 2. Kickstart选项 2.1auth 或者 authconfig(必需)2.2autopart2.3autostep2.4bootloader(必需)2.5btrfs2.6clearpart2.7cmdline2.8device...

2021-10-18 16:18:23 3659

原创 Linux网卡命名规则

内核态默认网卡命名规则基本流程:1、首先内核发现网卡设备,去调用设备probe函数去完成接下来的操作;2、网卡初始化操作:网卡驱动会默认提供一个eth%d的名称供该网口使用,然后调用内核接口register_netdev函数3、register_netdev流程中,会根据系统中已有的接口情况,找出一个最小的还没有使用的数字编号,分给新注册的网卡。比如,系统中当前有,eth0, eth2, eth3三块网卡。那么新注册的网卡,名字就是eth1了。strcpy(netdev->name, "et

2021-10-11 20:22:02 4072

原创 rpm数据库异常问题总结

一、经典案例目前遇到两种由数据库异常导致的问题,这里简单记录下,后续如果有其他类型则继续完善该文档;案例一:有明显的数据库异常打印[root@node18 ~]# rpm -qi atoperror: rpmdb: BDB0113 Thread/process 7230/139761069787200 failed: BDB1507 Thread died in Berkeley DB libraryerror: db5 error(-30973) from dbenvfailchk: BDB00

2021-08-30 15:37:12 1078

原创 slub分配流程-kmem_cache_alloc函数

slub分配流程-kmem_cache_alloc函数static __always_inline void *slab_alloc_node(struct kmem_cache *s, gfp_t gfpflags, int node, unsigned long addr){ void *object; struct kmem_cache_cpu *c; struct page *page; unsign

2021-08-25 21:42:41 931

原创 缺少网卡固件导致的网络服务异常,Can‘t load firmware file bnx2x/bnx2x-e2-7.13.15.0.fw

一、问题现象日志报错如下所示:kernel: bnx2x 0000:04:00.0: Direct firmware load for bnx2x/bnx2x-e2-7.13.15.0.fw failed with error -2kernel: bnx2x: [bnx2x_init_firmware:13480(ethB04-0)]Can't load firmware file bnx2x/bnx2x-e2-7.13.15.0.fwkernel: bnx2x: [bnx2x_func_hw_in

2021-07-12 14:18:40 1829

转载 Linux 的 history 命令显示时间

文章目录 如何让 Linux 的 history 命令显示时间- 方法一方法二-修改配置文件 在实习的时候,正在执行测试用例,发现自己的机器的环境坏了,找部门大佬求助,发现在我跑测试用例的时候有人在同时使用这台机器跑自动化脚本,正常的 history 是不显示时间的,这个可以让你看到时间,比较容易定位你的环境是否被别人...

2021-07-05 11:34:06 888

原创 slub释放过程-do_slab_free

do_slab_free一、快速路径if (likely(page == c->page)) { void **freelist = READ_ONCE(c->freelist); set_freepointer(s, tail_obj, freelist); if (unlikely(!this_cpu_cmpxchg_double( s->cpu_slab->freelist,

2021-06-14 09:10:18 486

原创 Linux定时器的简单使用

Linux定时器的简单使用一、基本概念定时器概念内核定时器是内核用来控制在未来某个时间点(基于jiffies)调度执行某一个函数的机制。源码位置kernel/kernel/timer.ckernel/include/linux/timer.h主要概念说明(1)结构体struct timer_list//与4.14内核相比,该结构发生了变化,去除了data结构变量;struct timer_list { /* * All fields that change durin

2021-04-29 11:47:29 1049 1

原创 proc文件系统实现用户空间与内核空间的数据通信

proc文件系统实现用户空间与内核空间的数据通信背景在Linux系统中,常常会用到proc文件系统来完成用户空间与内核空间的数据交互,比如说内核通过/proc/meminfo向用户层传递系统内存使用的信息,而用户层可以通过更改/proc下的文件改变内核层代码执行的路径,最简单的比如说通过proc的文件使系统panic重启,那么就可以使用echo c > /proc/sysrq-trigger命令。proc简介proc 文件系统是一种虚拟文件系统,它可以实现linux内核空间和用户空间的通信。对

2021-04-20 17:00:50 979 2

原创 使用samba完成Linux服务器与Windows之间的映射

一、配置步骤1、安装samba,如果配置了yum源则直接使用yum install samba安装即可;2、进行samba配置文件的修改:samaba的配置文件为/etc/samba/smb.conf[global] workgroup = SAMBA security = user passdb backend = tdbsam printing = cups printcap name = cups

2021-04-16 16:10:36 341

原创 blk_queue_bio函数学习

blk_queue_bio函数学习//块设备排入bio请求函数 //该接口作为通用的块设备处理bio请求的方式,主要思路是尽可能的将bio合并request中或者生成新的request。 static blk_qc_t blk_queue_bio(struct request_queue *q, struct bio *bio){ //(1)首先尝试在plug链表中寻找能够与该bio合并的request, //如果能够合并则合并后返回; //如果不能合并入plug

2021-04-01 19:34:58 729

原创 几篇关于UDEV的文章

http://www.360doc.com/content/14/1212/14/3200886_432383281.shtmlhttps://blog.51cto.com/rangochen/1372356

2021-04-01 10:49:42 70

转载 kmalloc参数GFP_ATOMIC or GFP_KERNEL?

http://blog.csdn.net/daydring/article/details/36670007 #include <linux/slab.h> void *kmalloc(size_t size, int flags); 给 kmalloc 的第一个参数是要分配的块的大小. 第 2 个参数, 分配标志, 非常有趣, 因为它以几个方式控制 kmalloc 的行为. 最一般使用的标志, GFP_KERNEL, 意思是这个分...

2021-04-01 10:10:46 866

原创 Linux系统下多版本gcc使用问题记录

Linux系统下多版本gcc使用问题记录一、背景系统:CentOS 7.6gcc版本:4.8.5需求gcc版本:8.3.0编译开源社区中5.10版本内核代码,制作相应的kernel、kernel-devel、kernel-debug等rpm包,而5.10内核对gcc编译器的版本要求为最低4.9,因此CentOS系统中自带的4.8.5版本的gcc无法满足编译5.10内核的要求,因此需要升级gcc版本,采取在编译内核态时使用升级的高版本gcc,而默认的用户态编译依然使用CentOS中默认的4.8.5;

2021-03-01 20:15:52 637

原创 initramfs文件解压方法

initramfs文件解压方法首先将/boot目录下的initramfs-“uname -r”.img文件拷贝到其他的路径下;使用/usr/lib/dracut/skipcpio命令进行解压,具体命令如下:/usr/lib/dracut/skipcpio initramfs.img | zcat | cpio -div...

2021-03-01 19:37:20 1231

原创 CentOS镜像中替换安装镜像的小系统的内核方法

CentOS镜像中替换安装镜像的小系统的内核方法一、需要修改的文件1、isolinux目录下的vmlinuz和initrd.img文件修改方法:(1)vmlinuz:使用相应版本的vmlinuz直接进行替换,注意权限问题及所属用户为root即可;(2)initrd.img:需要升级其中/lib/modules目录下的驱动文件。修改方式是先解压出来,替换掉里面的/lib/modules/下的ko。制作initrd.img(1)原始系统中的文件格式为xz(2)解压initrd.imgxz -d

2021-03-01 19:35:13 1498

转载 cdev 结构体、设备号相关知识解析

一、字符设备基础知识 1、设备驱动分类       linux系统将设备分为3类:字符设备、块设备、网络设备。使用驱动程序: 字符设备:是指只能一个字节一个字节读写的设备,不能随机读取设备内存中的某一数据,读取数据需要按照先后数据。字符设备是面向流的设备,常见的字符设备有鼠标、键盘、串口、控制台和LED设备等。 块设备:是指可以从设备的任意位置读...

2020-11-16 10:43:38 200

原创 关于Linux设备号的几篇文章

(1)https://blog.csdn.net/qq_15062527/article/details/81479521?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.channel_param&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.c

2020-11-13 10:58:48 53

转载 Linux内核中增加一个新的驱动模块

开发环境 开发板:A33-Vstar 开发板系统: Linux/arm 3.4.39 Kernel Ubuntu版本:Ubuntu14.04 ----------------------------------------------------   新增内核驱动,并可以通过make menuconfig配置。 内核完整路径:~/A33-Vstar/dragonboard/...

2020-10-29 21:48:32 745

转载 关于might_sleep的一点说明

http://blog.chinaunix.net/uid-23769728-id-3157536.html

2020-09-28 10:12:00 121

原创 查看设备UUID的方法

1、blkid命令blkid命令可直接输出各个设备的uuid;2、进入/dev/disk/by-uuid目录,用ll命令查看当开机出现找不到uuid的情况时,可以进入救援模式,对比grub.cfg或者/etc/fstab中的uuid与blkid命令查出来的uuid是否相同;...

2020-09-21 15:09:13 11994

原创 以rpm包形式升级Linux驱动

一般在自己适配驱动或者升级驱动时,如果将所有的安装命令以及后续的依赖关系写在一个文件中,那么在现场环境中只需要执行一步命令即可,减少了现场维护人员操作步骤,那么这里想写的一个方法是将升级驱动的步骤打包成rpm包的形式;总体的步骤分为如下两步:1、编写SPEC文件;2、利用SPEC文件制作rpm包;本文参考的RPM打包原理的网址如下:https://blog.csdn.net/get_set/article/details/53453320以升级i40e驱动为例编写SPEC文件如下:Name:

2020-09-15 21:49:23 577

原创 generic_make_request函数处理bio流程分析

generic_make_request 函数注释/**generic_make_request - re-submit a bio to the block device layer for I/O@bio: The bio describing the location in memory and on the device.This is a version of submit_bio() that shall only be used for I/O that isre

2020-09-13 10:33:53 1355 2

原创 使用docker环境编译驱动

使用docker环境编译驱动之前的文章中大概写了构建docker环境的方法和流程,那么我们可以使用搭建好的docker去编译适配特定内核版本的驱动;编译适配特定内核版本的驱动时,只需要安装对应的kernel-devel包即可。一般驱动代码中在Makefile文件或者common.mk文件中会指定编译所需要的内核源码地址,也就是安装kernel-devel包所生成的/lib/module下的目录。默认情况下为uname -r;我们在适配特定版本内核的驱动时只需要手动更改指定对应版本的BUILD_KER

2020-09-02 20:07:11 563

原创 服务器搭建docker环境的过程

服务器搭建docker环境的过程1、安装docker软件包,并启动docker服务;2、获取并安装docker镜像,有以下两种方式:(1)docker pull直接从官网拉取(2)在官网下载基础镜像的tar包或者tar.gz包,执行docker load -I xxx.tar命令加载docker镜像;(第二种用于那些无法连接外网的服务器环境)3、查看环境中已经安装的docker镜像,命令:docker images;4、在docker镜像的基础上创建容器;...

2020-09-02 16:02:55 566

转载 内存检测技术(slub_debug/kmemleak/kasan)

关键词:slub_debug、kmemleak、kasan、oob、Redzone、Padding。 Linux常见的内存访问错误有:越界访问(out of bounds)访问已经释放的内存(use after free)重复释放内存泄露(memory leak)栈溢出(stack overflow)不同的工具有不同的侧重点,本章主要从slub_debug、kmemleak、kasan三个工具介绍。kmemleak侧重于内存泄露问题发现。slub_debug和kasan有一

2020-08-29 14:09:35 1449

原创 linux开机时驱动的加载流程

Linux开机加载驱动时,涉及到了initramfs文件中包含的驱动以及硬盘中包含的驱动两个部分;而系统启动后手动加载驱动时只会用到硬盘中的驱动库,与initramfs无关。首先介绍下initramfs文件生成的原理及流程,然后在介绍下开机加载的流程及本地验证步骤。一、 initramfs文件生成原理1、 镜像安装时生成initramfs文件在安装镜像时,会去扫描所安装的服务器中在位的设备,系统会将扫描到的设备的驱动以及默认常用的一些驱动包含在initramfs文件中;解压initramfs文件后生成

2020-08-29 11:25:16 2480

转载 linux内核IO模块plug/unplug机制

    PLUG/UNPLUG即蓄流/泄流,蓄流的目的是为了提高bio在elevator queue合并和排序的机会,以提高 IO效率。    PLUG/UNPLUG对应blk_start_plug()和blk_finish_plug()两个...

2020-08-24 19:04:41 942

原创 使用BCC工具获取Linux内核空间read/write操作的文件名

使用BCC工具获取Linux内核空间read/write操作的文件名一个文件的文件名信息保存在file结构体中,具体为file->f_path.dentry->d_iname;那么如何在实际环境上使用bcc工具探测一个进程操作的文件名呢?以read文件为例,在内核中可以抓取vfs_read函数,该函数的原型为:ssize_t vfs_read(struct file *, char __user *, size_t, loff_t *);bcc使用trace工具抓取的命令为:./tra

2020-08-24 18:59:25 229

转载 Linux内核原子操作及函数

所谓的原子操作,就是该操作绝不会在执行完毕前被任何其他任务或事件打断,也就是说,它的最小的执行单位,不能有比它更小的执行单元,因此这里的原子实际是使用了物理学里物质微粒的概念。原子操作需要硬件的支持,因此是架构相关的,其API和原子类型的定义都定义在内核源码树的include/sam/atomic.h文件中,它们都是使用汇编语言实现,因为c语言并不能实现这样的操作。原子操作主要用来实现资源计数,很多引用计数就是通过原子操作实现的。typedef struct {int counter;}atomic_

2020-08-20 16:23:09 322

原创 一次Linux驱动升级的问题记录

在Linux开机时驱动的加载过程中总结过驱动的加载方式,会涉及到initramfs文件中的驱动,因此在驱动升级的时候要考虑到initramfs文件中的驱动是否也对应的升级到对用的版本,这是本文想记录的一个点。linux开机时先去加载initramfs文件中的驱动,具体的流程如下图所示。因此我们需要注意的是在系统中升级完驱动后,要保证initramfs中的驱动进行更新。以i40e驱动为例,加入我们采用make&make install的方式在当前的环境上编译升级驱动时,i40e驱动的makef

2020-08-18 22:09:04 710 1

原创 OmniCppComplete实现C代码自动补全

OmniCppComplete主要提供输入时实时提供类或结构体的属性或方法的提示和补全。跟Talist一样,OmniCppComplete也是一个Vim插件,同样依赖与Ctags工具生成的tags文件。安装步骤跟Taglist类似。可以参考http://blog.chinaunix.net/uid-20737871-id-3402590.html从http://www.vim.org/scripts/script.php?script_id=1520下载安装包后。1)进入~/.vim目录,将安装版解压

2020-08-18 22:05:59 1064

转载 Linux内核中的延时函数

第一类延时函数原型是:(忙等) ( 头文件是 #include<linux/delay.h> ) void n...

2020-08-13 11:44:48 1158

转载 Linux进程概述

由操作系统定义,并由操作系统所操控的一个特殊的数据结构实例叫做进程。它连接了用户代码,拥有代码运行所需的独立内存空间,在调度器的调度下使用分配给它的处理器时间片来运行。 进程及其私有内存空间进程类似于UCOSIII中的任务,它也是用户应用程序可执行代码在系统中的一个运行过程。系统中用来表示进程身份和存在的也是控制块,只不过叫做进程控制块。进程与UCOSIII任务之间最重要的一个区别就是:进程具有自己的内...

2020-07-25 10:28:06 189

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除