- 博客(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内核分配内存
既然内核已经维护了一组拥有同一大小内存块的内存池,那么为什么不为这些反复使用的块增加某些特殊的内存池呢?kmalloc 和 __get_free_pages 返回的内存地址也是虚拟地址,其实际值要由MMU(内存管理单元,通常是CPU的组成部分)处理才能转为物理内存地址。内存池其实就是某种形式的后备高速缓存,它试图始终保存空闲的内存,以便在紧急状态下使用。Linux处理内存分配的方法是,创建一系列的内存对象池,每个池中的内存块的大小是固定一致的。如果模块需要分配大块的内存,使用面向页的分配技术会更好些。
2023-08-17 14:45:19 154
原创 LINUX内核中的INIT_LIST_HEAD,list_add_tail,list_for_each_entry详解
linux内核中的循环双链表的使用示例
2022-07-22 11:05:12 4095
原创 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
空空如也
有遇到GDB调试程序运行一点问题没有,直接跑程序就会段错误的么。
2021-10-19
TA创建的收藏夹 TA关注的收藏夹
TA关注的人