自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(37)
  • 问答 (1)
  • 收藏
  • 关注

原创 rdma_core ibv接口 ibv_get_device_list

【代码】rdma_core ibv接口 ibv_get_device_list。

2024-07-19 09:47:37 66

原创 linux 内存寻址

当使用80x86(32位)微处理器时,一般分为三种不同的地址: 包含在机器语言指令中用来指定一个操作数或一条指令的地址。每一个逻辑地址都由一个段(segment)和偏移量(offset或displacement)组成,偏移量指明了从段开始的地方到实际地址之间的距离。所有段都从0x00000000开始,只需关注段内偏移即可。而段内偏移的值恰好等于线性地址的值。线性地址通常用十六进制数字表示,值的范围从0x00000000到0xffffffff。物理地址用于内存芯片级内存单元寻址。他们与从微处理器的地址

2024-04-11 15:27:39 491

原创 linux ipv6 ip设置

PC0与PC1,网口eth0以及网口eth1。两台机器,两个网口直连。

2024-03-05 16:59:39 371

原创 linux中断绑核

【代码】linux中断绑核。

2024-01-29 14:06:57 528

原创 linux ip_forward简单测试(两台主机,包括namespace的使用)

linux测试ip_forwad功能

2023-12-28 11:26:02 440 1

原创 linux内核分配内存

既然内核已经维护了一组拥有同一大小内存块的内存池,那么为什么不为这些反复使用的块增加某些特殊的内存池呢?kmalloc 和 __get_free_pages 返回的内存地址也是虚拟地址,其实际值要由MMU(内存管理单元,通常是CPU的组成部分)处理才能转为物理内存地址。内存池其实就是某种形式的后备高速缓存,它试图始终保存空闲的内存,以便在紧急状态下使用。Linux处理内存分配的方法是,创建一系列的内存对象池,每个池中的内存块的大小是固定一致的。如果模块需要分配大块的内存,使用面向页的分配技术会更好些。

2023-08-17 14:45:19 154

原创 perf以及抓内核火焰图的使用

【代码】perf以及抓内核火焰图的使用。

2023-06-06 14:52:56 135

原创 linux 内核软件限速

【代码】linux 内核软件限速。

2023-05-30 14:17:33 134

原创 内核编程 C语言获取CPU型号

【代码】内核编程 C语言获取CPU型号。

2023-04-17 14:35:40 404

原创 无网络升级linux内核版本简单步骤及选择内核版本启动

linux内核编译及升级选择

2022-10-21 10:02:57 671

原创 原始套接字指定网口发包

原始套接字指定网口发包

2022-10-12 16:27:04 128

原创 搭建samba共享

linux搭建samba共享

2022-10-09 18:51:34 106

原创 pci设备更新硬件设备详细厂商信息

通过脚本改变lspci显示内容

2022-09-20 14:17:26 607

原创 内核模块编译Makefile通用模板

内核模块编译Makefile通用模板

2022-09-19 15:01:22 221

原创 C语言字符串效验是IPV4还是IPV6

字符串效验IP正确性

2022-07-25 09:34:35 604

原创 LINUX内核中的INIT_LIST_HEAD,list_add_tail,list_for_each_entry详解

linux内核中的循环双链表的使用示例

2022-07-22 11:05:12 4095

原创 驱动开发(万金油创建字符设备my_cdev并初始化)

结构体cdev如何使用

2022-06-15 15:04:21 108

原创 socket通信服务端实现

#include <sys/socket.h>#include<netinet/in.h>#include <arpa/inet.h>#include <string.h>#include <unistd.h>#include <stdlib.h>#include <sys/types.h>int socket_create(){ struct sockaddr_in addr; int reuse =

2022-03-31 17:02:36 245

原创 ubuntu 20.04.1 普通用户执行root权限程序,通过代码配置静态IP

系统环境 :Ubuntu 20.04.1使用环境: 比如公司发给用户的机器,不能给用户root密码,用户就修改不了IP,所以需要做一个程序能修改IPeuid概念 :当进程执行时,操作系统会对euid进行识别,以此判断用什么权限来执行这个进程。1.确定要修改的网卡名(该图片是网上找的)2.查看网卡配置文件: cat /etc/netplan/*.yaml 每台机器yaml文件名不一样,需要自己确定配置静态IP要修改该文件的内容network: version: 2 renderer:

2022-03-26 15:06:30 4204

原创 ubuntu20.04配置静态ip地址

1.需要编辑/etc/netplan/**.yaml# Let NetworkManager manage all devices on this systemnetwork: version: 2 renderer: NetworkManager ethernets: eno1: addresses: - 192.168.1.22/24 gateway4: 192.168.1.1 nameservers: addr

2022-03-25 08:15:42 431

原创 /etc目录下重要文件

1.*/etc/sysconfig/network-scripts/ifcfg-eth0 网卡的配置信息重启网卡:1)/etc/init.d/network restart(所有网卡)2)ifdown eth0&&ifup eht0(只针对eht0)通过steup-network configuration 修改网卡配置[root@localhost /]# cat /etc/sysconfig/network-scripts/ifcfg-eth02:/etc/resolv.co

2022-02-14 11:36:11 713

原创 ubuntu-ssh安装及设置以及防火墙关闭

首先要关闭防火墙:1.getenforce //查看当前状态 Enforcing2.setenforce 0 //修改状态3.getenforce //Permissive防火墙永久关闭"vim /etc/selinux/config" 将"SELINUX=enforcing"改为"SELINUX=disabaled"1.安装ssh: sudo apt-get install openssh-server2.启动ssh:打开 " 终端窗口 ", 输入" sudo ps -s | grep

2022-01-08 17:24:50 1773

原创 ubuntu创建普通用户,删除用户,修改用户密码,修改用户名

创建用户名为 user 的用户1.进入root权限账号su2.添加普通用户名useradd user3.设置普通用户密码passwd user4.修改用户登入后所使用的shellusermod -s /bin/bash user5.设置家目录usermod -d /home/user user6.创建家目录目录mkdir /home/user7.改变目录拥有者和组chown -R user:user /home/user...

2022-01-07 15:27:51 4564

原创 快速找到段错误位置

这里使用gdb调试,本人其实也不怎么会gdb。就几个简单命令即可定位段错误的位置。例如, 执行程序为 ./a.out 123以上面例子为例,1.linux命令行敲入 gdb ./a.out2.如果有参数,则gdb继续敲入 set arg 1233.运行,敲入 r4.敲入 bt即可看到在哪个文件哪个函数中发生段错误 ...

2021-08-26 09:35:08 1172

原创 在使用libpci库时,遇到的问题

下载pci库本意是想直接链接下载的pci库,像我们调用自己写的库一样,但是ldd 发现 链接的库 是在系统路径下编译通过了,但是找不到相对应的函数。1.可能系统版本 libpci 版本过低解决方法:升级 pci库cd 到PCI库文件所在目录ll | grep pci删除相对应的软链接rm -Rf libpci.so.3可以在网站中下载新版本的pci库下载完成后 可以pci库使用教程建立新的软链接ln -s libpci.so.3.7.0 libpci.so.3...

2021-07-08 17:07:39 714

原创 Linux系统下DPDK源码编译,testpmd的使用以及编译过程中遇到的问题,以及高版本DPDK meson+ninja编译步骤

1.首先,下载以及编译官网下载DPDK源码, DPDK官网 : dpdk.org以dpdk-20.08为例,下载完成后,cd 到源码所在路径1. 指定DPDK安装路径, 设置所需的环境变量并转到源目录 export RTE_SDK=/dpdk-20.08 2. ls ./config3. make config T=x86_64-native-linux-gcc4. 设置编译目标 export RTE_TARGET=build5. make2.编译之后,运行前的设置(大

2021-07-01 16:48:55 3660

原创 数组解决约瑟夫环问题(容易理解)

核心思想:循环遍历数组,直至剩下只有一个不为0的元素。第一个人数组下标记作0,每个元素都有不为0的值,开始数数,数到这个人,这个人死亡,就把该下标所对应的元素的值置为0,同时剩余人数减1,一直到剩余人数为1。那么该数组内容不为0的元素就是还活着的人,数组下标加1,则为第多少个人活着。/*name: the_last_guyinput: arr death_num lenout: nonereturn i:the last guy index*/int the

2021-06-11 15:36:00 1053 2

原创 位域、联合体的使用方法

联合体定义在进行某些算法的C语言编程的时候,需要使几种不同类型的变量存放到同一段内存单元中。也就是使用覆盖技术,几个变量互相覆盖。这种几个不同的变量共同占用一段内存的结构,在C语言中,被称作“共用体”类型结构,简称共用体,也叫联合体。假如我们要一个unsigned int型 变量 0-3位 学号 4-7位 年龄 8-11位 性别 其他位代表其他信息#include <stdio.h>struct info{ unsigned int id:4,

2021-06-04 17:10:45 502

原创 Debug日志输出

#define DEBUG(...)\do{ \ FILE *fp = fopen("./log.txt","a+"); \ if(NULL == fp)breal; \ fprintf(fp,__VA_ARGS__);\ fclose(fp);\}while(0);DEBUG("%s = %d", "age", 100);

2021-05-25 17:19:47 571 2

原创 工作中,遇到的问题(持续更新)

1移位遇到的问题struct pci_addr{ unsigned int domain; unsigned char bus; unsigned char devid; unsigned char function;}; long addr; addr |= pci.function; addr |= pci.bus<<8; addr |= pci.devid<<16; addr |= pci.domain<<24;本来的想法是 struc

2021-05-24 13:39:19 72

原创 linux下使用C语言获取所有PCI设备地址并存储,即获取/sys/bus/pci/devices目录下的所有目录名称

首先,lspci可以看设备地址,但是有些机器是不显示域的。/sys/bus/pci/devices目录下有所有PCI设备地址,以目录名字存在例如“0000:02:00.0”分为4个部分,因为是字符串,如果要处理,要转成相应的16进制,因为这是16进制表示的。第一部分0000 :代表域第二部分02 :代表总线编号第三部分00 :代表设备号第四部分0 :代表功能号#include <stdio.h>#include <sys/type

2021-05-17 16:39:07 2340

原创 网络数据分析及基于DPDK提取IP头,Eth头

网络数据在传输过程中,在传输层,会在数据前加上 源端口,目的端口,即TCP头(UDP头)在网络层,会加上源IP、目的IP以及传输方式(TCP/UDP),即IP头在数据链路层,会加上源MAC、目的MAC ,即Eth头一个数据包由以上部分组成我们接收到数据包,运用的DPDK为例,提取出Eth头,IP头,端口Linux中有定义好的存储 Eth头,IP头这种结构体,直接复制过来用#include <linux/byteorder/little_endian.h>#include <

2021-04-30 12:13:52 988

原创 多文件目录makefile加内核驱动编译模板

目录结构如下第一层 makefileCC=gccSRC_DIR=$(shell pwd)BUILD_DIR:=$(SRC_DIR)/buildexport CC SRC_DIR BUILD_DIR all:build lib binbuild:ECHO @mkdir -p -m 755 $(BUILD_DIR)lib:ECHO @mkdir -p -m 755 $(BUILD_DIR)/lib $(MAKE) -C $(SRC_DIR)/lib CURRENT_DIR=lib

2021-04-29 15:09:07 455

原创 C语言中十六进制字符串处理以及分析

通过命令行传递十六进制字符串参数程序运行 ./test_main 0x12345678int main(int argc, char** argv){ unsigned char tmp; unsigned char match[64]; char *str; int i; memset(match, 0, 64) str = argv[1]; if (str[0] == '0' && str[1] == 'x') { str += 2; } for

2021-04-20 13:57:26 2780 2

原创 C语言改变指定4个字节的内容,例如改变第2个字节到第6个字节的内容

/*首先说一下从1开始数 字节数例如 0x11223344 11是第一个字节,就当做是大端字节序,一般电脑为小端字节序补充一下大端小端字节序大端字节序: 最直观的字节序,数据的高位存在于地址的低位 小段字节序: 数据的高位存在于地址的高位*/#include <stdio.h>int change(int num, void *my_info) //num是代表多少个字节开始,my_info是要修改的指针类型变量{ //my_char:指向的空间为 my_inf

2021-04-16 14:36:01 545

原创 同一文件下多个.c文件Makefile制作Readme

CC =gccTARGET = test_mainOBJS = 1.o 2.o 3.o 4.o 5.o SRC = $(OBJS:%.o=%.c)$(TARGET):$(OBJS) $(CC) -o $(TARGET) $(OBJS)$(OBJS):%.o:%.c $(CC) -c $< -o $@ //$(CC) -c $<clean: rm *.o (TARGET) 首先,$@:目标对象$^:所有依赖对象$<:第一个依赖对象该目录下总共有6个

2021-04-16 13:41:42 208

原创 制作动态库以及Makfile制作动态库并编译(简单版本)

Makfile链接动态库并编译这里主要是自己写的一个动态库链接版的makefile,比较简单,复杂的我也不会,哈哈哈CC=GCCCFLAGS = -Wall -fPIC -o TARGET = libmytest.soMYOBJS = test_main.oMYTARGET= test_mainOBJS = libmytest.oSRCS = libmytest.c$(MYTARGET):$(TARGET) $(MYOBJS) //从这行开始 $(CC) -o

2021-04-14 19:52:55 207

空空如也

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

TA关注的人

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