原创 LINUX_VERSION_CODE與KERNEL_VERSION

由於Linux版本的在不斷更新,當設備驅動去兼容不同版本的內核時,需要知道當前使用的內核源碼版本,以此來調用對應版本的內核API,這兩個宏定義在文件 /usr/include/linux/version.h #define LI

原创 網絡設備模塊初始化(net/core/dev.c/net_dev_init)

/* * Initialize the DEV module. At boot time this walks the device list and * unhooks any devices that fail to

原创 Python調用shell命令常用方法

Python調用shell指令 方法一、使用os模塊的system方法: os.system(cmd),其返回值是shell指令運行後返回的狀態碼,int類型,0表示shell指令成功執行,256表示未找到,該方法適用於shell

原创 makefile知識點記錄

makefile關鍵字使用: 以下代碼保存爲Makefile後,執行make即可看到各關鍵字意義。 # Target::test # .PHONY: test test: @echo ${CURDIR} @echo ${M

原创 ssh(或sftp)連接慢問題解決

問題1:ssh連接很慢 解決方案: 這是應爲linux系統默認開啓DNS認證,我們關掉即可。 vim /etc/ssh/sshd_config UseDNS yes 改爲no(122行左右); GSSAPIAuthen

原创 gdb編程打印全局變量

以某個全局數組爲例說明如何gdb編程打印所有變量: 寫變量遍歷代碼 創建search.gdb文件寫如下內容: define print_hash_table set $cnt =1 set $use=2 while $cnt

原创 python調用c庫之ctypes及callback相關問題解決

Python調用c庫學習   Python模塊ctypes是Python內建的用於調用動態鏈接庫函數的功能模塊,一定程度上可以用於Python與其他語言的混合編程。由於編寫動態鏈接庫,使用C/C++是最常見的方式,故ctypes最常用於P

原创 鏈路帶寬測試工具iperf使用

下載安裝iperf https://iperf.fr/iperf-download.php 下載安裝對應版本,不區分服務端和客戶端; 運行 udp模式測試:(tcp模式去掉-u參數即可) 服務端執行: iperf -p 8000

原创 問題排查積累

1、查看進程啓動時間 ps -eo pid,lstart,etime | grep pid (lstart爲啓動時間,etime爲運行多長時間) 2、查看進程內存分佈 pmap -x pid 3、已安裝so庫及版本查看 ldcon

原创 網絡常用python函數

字符串mac地址轉換: def str2mac(s): return ("%02x:" * 6)[:-1] % tuple(orb(x) for x in s) mac地址轉字符串: def mac2str(mac):

原创 tcmalloc編譯使用

一、編譯 https://github.com/gperftools/gperftools/releases 如上鍊接頁面下載需要版本的代碼; cd /home/code/; tar -zxvf gperftools-2.7.90

原创 gdb報錯(A program is being debugged already)

用 gdb attach pid 的方式將gdb掛到一個正在運行的進程上,有時會提示 A program is being debugged already. Kill it? (y or n) 可能是由於正在執行的進程對應的b

原创 linux malloc內存申請相關參數設置

情況一、malloc小於128k的內存 malloc小於128k的內存時使用brk分配內存,將_edata往高地址推(只分配虛擬空間,不對應物理內存(因此沒有初始化),第一次讀/寫數據時,引起內核缺頁中斷,內核才分配對應的物理內存

原创 __typeof__(type)的用法(gcc擴展)

__typeof__(struct s *) xxx; 等同於: struct s * xxx; 下面的例子可以證明: #include <stdio.h> #include <stdlib.h> struct

原创 Linux top命令的用法詳細詳解

首先介紹top中一些字段的含義: VIRT:virtual memory usage 虛擬內存 1、進程“需要的”虛擬內存大小,包括進程使用的庫、代碼、數據等 2、假如進程申請100m的內存,但實際只使用了10m,那麼它會增長10