- 博客(49)
- 问答 (1)
- 收藏
- 关注
原创 CPU架构对比——飞腾鲲鹏英特尔
通过指令lstopo与lscpu来对比三种CPU架构lstopo指令解析numa节点由cpu簇cluser组成,一个numa=2个簇,1个簇4个物理核。物理核独自共享L1,簇内物理核共享L2,numa内的簇间共享L3,numa间共享内存。鲲鹏lscpu指令解析lstopo指令解析每个簇里一个物理核参考:
2024-03-05 16:53:17
873
原创 linux内核网络子系统初探2---socket层
接着上文,从这章开始,将按照五层网络模型的顺序逐层分析内核代码。socket部分主要看net/inet/sock.c、net/inet/protocol.c、net/socket.c这几个文件。我个人的理解,在严格意义上,应用层指的应该是各类网络通信模块(例如ftp、http等),socket应该是介于应用层与内核间的接口层,本质不属于应用层。但按功能来讲它是属于应用层的核内接口部分。
2023-05-11 17:14:32
957
原创 linux内核网络子系统初探---概述
linux内核网络子系统初探系列,将会对照着最原始版本V1.0的内核代码,按网络模型一层层的学习内核中的各个网络模块。
2023-05-04 23:12:08
744
原创 wireshark简易抓包分析——ping指定大小包长多28Byte
测试ping时会发现一个现象:在指定ping包长度后,实际发出的包总长=指定ping包长度+28。
2022-09-21 23:23:37
5130
原创 物理/逻辑CPU、Core、Thread等概念
物理/逻辑CPU、Core、Thread等概念本篇为自己学习用,转载下。翻译的太好了。differences-between-physical-cpu-vs-logical-cpu-vs-core-vs-thread-vs-socket
2022-02-12 15:43:08
1007
原创 DPDK初始化过程之中断相关
DPDK初始化过程之中断相关rte_eal_intr_initTAILQ_*系列函数及intr_sources链表intr_sources链表节点的添加——rte_intr_callback_registerrte_ctrl_thread_create——创建主控线程eal_intr_thread_main——主控线程入口函数rte_eal_intr_initDPDK的中断部分初始化从rte_eal_intr_init开始,由主初始化函数rte_eal_init调用。rte_eal_intr_init
2022-01-25 00:13:55
656
原创 Debug信息分级别输出
Debug信息分级别输出简介代码实现运行效果简介驱动需要实现一个功能:将输出信息根据重要程度分成三个级别,INFO < DEBUG < ERROR,有一个全局变量debug_level控制当前驱动允许输出信息的级别,要做到能实时修改这个debug_level,从而控制驱动输出的级别(级别>=debug_level的信息才可输出)。代码实现首先,在头文件test.h里定义下三种级别:#define INFO_LEVEL 2#define DEBUG_LEVEL 1#defi
2021-08-31 19:38:00
1866
原创 linux驱动之debugfs使用
linux驱动的debugfs代码运行效果TIPS代码linux系统对系统内驱动提供一个调试功能——debugfs。debugfs是一种通过对用户空间文件进行读写操作来实现驱动和用户空间交互的调试方式。驱动需要在系统debugfs根目录下创建一个文件,再实现对该文件的读写操作函数。这样在用户空间读写文件时,会调用驱动中的操作函数,就可进行相关的驱动内部操作了,一般用于修改驱动某个变量值或是内部消息的传递。这个debugfs根目录地址是系统分配的,默认情况下,debugfs会被挂载在目录/sys/k
2021-08-30 16:21:26
3927
原创 WHQL之无需HLK结果就可获得微软驱动数字签名+Cannot specify [ClassInstall32] section解决
WHQL之无需HLK结果就可获得微软驱动数字签名+Cannot specify [ClassInstall32] section解决简介正文简介Windows驱动无需通过HLK测试就可先获得微软数字签名Microsoft Windows Hardware Compatibility Publisher。亲测成功截图:起因是,公司最近开始研究windows驱动,也购买了EV证书,以为剩下的事有了证书就轻轻松松了,却得知如果想要驱动能在正常模式下的Windows系统上安装运行而不报错,需要让驱动获得微
2021-08-26 17:38:11
1328
1
原创 wpa_supplicant2.9之sae握手流程(续)
wpa_supplicant2.9之sae握手流程(续)本文延续上一篇wpa_supplicant2.9之sae握手流程,继续分析wpa_supplicant代码中sae auth的另一种方式:external auth(文中若涉及到与上篇重复的函数流程不会再次细说,可看上篇)wpa_supplicant_associate判定当前wifi驱动是否走external_auth流程,主要是看wpa_s->drv_flags 里WPA_DRIVER_FLAGS_SME比特位是否置1。置1,会在w
2021-07-15 16:43:00
2352
2
原创 wpa_supplicant2.9之sae握手流程
wpa_supplicant2.9之sae握手流程SME介绍wpa_supplicant_connectsme_authenticatesme_auth_start_cbsme_send_authenticationwpa_drv_authenticatewpa_driver_nl80211_authenticatedo_process_drv_eventmlme_event_authsme_event_authsme_sae_authWPA3-Personal采用了新的加密方式,SAE算法。WPA2的
2021-07-09 19:37:19
3310
2
原创 hostapd启动流程(二)
hostapd启动流程(二)继续上篇:https://blog.csdn.net/krokodil98/article/details/116601818。上篇写了不需要acs扫描,固定信道启动的流程,本篇分析另一条路径,即acs扫描信道流程。hostapd_setup_interface -》 setup_interface-》 setup_interface2-》 1. hostapd_select_hw_mode -》hostapd_check_chans -》acs_
2021-06-17 23:01:27
2217
原创 tasklet+kthread+workqueue使用记录
tasklet+kthread+workqueue使用记录taskletkthreadworkqueuelinux的任务调度机制太高深了,目前只能做到会用这三种结构。但具体什么情况哪种性能更高却没法详细的总结下来,还需多做项目多积累啊。。。。linux是个坑。。。本篇仅记录下tasklet结构体定义struct my_bus { ... ... struct tasklet_struct run_tasklet; };tasklet待执行的函数void exec_taskl
2021-05-19 17:24:01
308
原创 hostapd启动流程(一)
hostapd启动流程(一)总述... -> setup_interface2hostapd_select_hw_modehostapd_check_chanshostapd_is_usable_chanshostapd_is_usable_chanhostapd_check_ht_capabieee80211n_check_40mhzieee80211n_scan_channels_2g4hostapd_setup_interface_complete总述最近花了很多时间学习hostapd 2.
2021-05-10 19:55:56
4893
原创 脚本实现登录服务器执行命令+上传下载文件自动化
脚本实现登录服务器执行命令+上传下载文件自动化winscp的上传下载脚本python脚本前期准备python脚本最近一直在调试一个客户的平台,但是每次的调试流程都是:通过winscp上传本地文件到服务器上某个固定路径,在xshell上输入make指令编译系统代码,编译成功后再通过winscp将新生成的烧录文件下载到本地。整个流程重复性极强而且涉及到的文件夹路径也很固定,耗时也非常的长,故而想到用脚本来将这些操作实现自动化,不需要我守在电脑前面等着。winscp的上传下载脚本winscp这种ssh软件
2021-03-22 19:11:52
1577
1
原创 container_of源码分析
container_of源码分析container_of宏定义分析BUILD_BUG_ON_MSG分析offsetof在linux/android代码中经常能看到container_of这个函数,这次抽时间去学了下它具体的实现机制。本文代码基于android10,rk3399平台代码。container_of宏定义定义位于:rk3399-android-10/kernel/include/linux/kernel.h/** * container_of - cast a member of a s
2021-02-20 19:27:21
333
1
原创 ubuntu下更改应用调用名称(ack-grep为例)
ubuntu下更改应用调用名称(ack-grep为例ubuntu下安装了个ack-grep来替换系统自带的grep。但调用时总是需要在终端中输入完整的ack-grep -[options]才行,需要搜很多次的时候输入起来有点麻烦。故想把它的调用名字改成ack -[options],这样搜索时调用起来更方便。需要改下系统中调用ack-grep时用的名称。先看下ack-grep可执行文件的位置:test@test-Vostro-3268:~$ which ack-grep /usr/bin/ack-g
2021-02-20 11:08:49
373
原创 编译安装wpa_supplicant
编译安装wpa_supplicant下载指定wpa_supplicant包下载指定openssl包编译安装openssl编译安装wpa_supplicant本文记录了编译安装wpa_supplicant2.6的详细流程。系统ubuntu 12.04,内核3.4.111。由于wpa_supplicant需要使用到openssl的库,故编译安装wpas还需先安装匹配版本的openssl下载指定wpa_supplicant包1.下载指定版本的wpa_supplicant源码包:访问网址 w1.fi/rel
2021-02-07 17:26:01
2458
1
转载 ubuntu设置默认gcc版本
ubuntu设置默认gcc版本想看精简版的直接看大佬的这篇,本文在这篇命令基础上贴了每一步的操作,可和我的截图对比步骤:https://blog.csdn.net/uniqueyyc/article/details/85407693先查看下update-alternatives config:发现暂时未添加任何gcc软链接test@test-Vostro-3268:~$ sudo update-alternatives --config gcc update-alt
2021-01-29 16:27:26
6533
原创 升降级Ubuntu的linux内核
升降级Ubuntu的linux内核因工作需要,在电脑上装多个版本的linux内核。环境ubuntu 20.04。访问:http://kernel.ubuntu.com/~kernel-ppa/mainline选择自己需要的指定版本这里会列出很多很多版本,建议直接搜索需要安装的版本号。点进去后,见以下界面。因uname -m显示系统cpu架构是x86_64,故而应下载amd64.deb后缀的文件。需要下载:amd64/linux-headers-5.10.1-051001
2021-01-29 15:12:24
754
1
原创 驱动与用户层通信之ioctl的使用
驱动与用户层通信之ioctl的使用一、 驱动中注册netdev二、 驱动中的处理ioctl通信的函数三、 内核中相关定义规范四、 驱动中存取ifreq中数据五、 用户层的软件代码:总结一、 驱动中注册netdev驱动中注册net_device_ops全局变量结构体:static const struct net_device_ops myNetDeviceOptions = { .ndo_open = ..., .ndo_stop
2021-01-28 15:23:48
2687
原创 c编译成可执行文件在linux上运行
平台是ubuntu20.04。还是那个超级简单的例子,在android上的编译和运行可看之前文章:c交叉编译成可执行文件在android上运行因为突然想到android那篇忘记涉及到执行C程序时传命令行参数这部分,又想到linux和android上的C程序编译和运行又并不完全一样,故而有了这篇。实验步骤:新建文件夹hello:创建hello.c和makefile。test@test-Vostro-3268:~/wahaha/hello$ lsMakefile hello.chello.
2021-01-21 19:30:49
754
3
原创 c交叉编译成可执行文件在android上运行
平台用的是rk3399-android-10。以下是一个超级简单的例子:本文是不需要用makefile编译的例子,有时小工具只涉及到一个或极少的c文件时,一条指令编译即可。单独建一个文件夹名为hello_world,里面就一个c文件。test@ubuntu-07:~/workspace$ ls hello_world/hello.cc文件代码:#include<stdio.h>int main(void){ printf("hello world\n");
2021-01-08 16:46:54
1848
原创 Android10 insmod源码分析
rk3399-android-10/frameworks/opt/net/wifi/libwifi_hal/wifi_hal_common.cppstatic int insmod(const char *filename, const char *args) {int ret;int fd;fd = TEMP_FAILURE_RETRY(open(filename, O_RDONLY | O_CLOEXEC | O_NOFOLLOW));printf(“insmod filename = %s\
2021-01-06 15:34:13
3088
2
原创 分析wpa_supplicant起始函数main源码
wpa_supplicant初始化main函数wpa_supplicant的目录及文件maincheck_wifi_chip_type_stringread_wpa_param_configwpa_supplicant的目录及文件本篇blog的源码来源于安卓10,对应的wpa_supplicant版本为8。先来看下wpa_supplicant代码的目录结构源码目录:xxx@ubuntu-07:~/workspace/rk3399-android-10/external/wpa_supplicant
2020-12-21 19:05:56
901
原创 Android linux firmware下载——续request_firmware之fw_path_para方式
安卓10固件下载——续正文开始之前有写过一篇blog来分析安卓代码里固件下载部分的实现,链接:android8 linux内核下载固件函数request_firmware流程分析但是最近在工作中,遇到了一种情况,在安卓文件系统的同一个目录,有时自己编写的固件下载函数能够成功,有时再重新烧录一遍系统以后就不成功了,总显示打开文件失败(至今不知为何,忘有大佬能指出可能存在的问题)。在这种情况下,需要暂时使用安卓系统自带的request_firmware来下载固件,但代码自带的fw_path中的路径不包含
2020-12-14 20:37:52
2010
4
原创 linux源码中spin_lock函数分析
spin_lock代码分析spin_lockraw_spin_lock系列函数spin_lock代码位置:/kernel/include/linux/spinlock.hstatic __always_inline void spin_lock(spinlock_t *lock){ raw_spin_lock(&lock->rlock);}可见,spin_lock的实现主要是通过raw_spin_lock实现的。看一下spinlock和raw_spinlock的
2020-11-26 16:37:09
728
1
原创 搬迁声明:博客以后会同步到OSCHINA啦~
博客以后会同步到OSCHINA啦~以下是开源中国的个人主页链接:我的博客即将同步至 OSCHINA 社区,这是我的 OSCHINA ID:krokodil98,邀请大家一同入驻:https://www.oschina.net/sharing-plan/apply
2020-11-25 22:26:08
134
空空如也
linux sata硬盘热插拔
2022-06-21
TA创建的收藏夹 TA关注的收藏夹
TA关注的人