qianyi
qianyi
最近遇到一个客户计算节点crash的问题.下面记录下分析过程. ``` [3861557.410491] ------------[ cut here ]------------ [3861557.468045] kernel BUG at arch/x86/kvm/mmu.c:1354! [3861557.527671] invalid opcode: 0000 [#1] SMP [3861557.579191] Modules linked in: 8021q garp mrp br_netfilter ebtable_filter ebtables ip6table_filter ip6_tables...
Centos7 可以通过内核参数来控制网卡的命名方式. ``` biosdevname=0, net.ifnames =0 //使用内核默认的ethx形式 biosdevname=0 net.ifnames=1 //使用可以预测的方式来命名. ``` 默认情况下(cmdline中没有添加上面两个参数)使用可预测的方式命名. ### 什么叫可以预测的方式命名? 简单来说就是systemd会根据网卡的PCI bus/slot/function number来命名, 知道网卡命名就知道它对应的具体PCI位置,反过来也是一样的. 下面看实现. Systemd在重命名的时候依次找下面的规则 ```C // link-config.c switch (*policy) { case NAMEPOLICY_KERNEL: respect_predictable =...
## 背景 最近收到一个Bug,carplay在反复连接30次左右就连不上了;具体现象就是,USB能连上,iAP2鉴权也能通过,但就是建立不起CarPlay Session连接,没办法,只有一行一行添加打印了; ## 调试 首先CarPlay是Apple_PlugIn这边调用bonjour来发现CarPlay服务的,然后在Apple_Plugin这边添加了很多打印,发现和mdns端通信的socket已经连上了,但在连接30次左右始终没来数据,猜猜是不是bonjour那边出了问题。 先保存一份正常连接情况下的bonjour打印,注意红框地方。  在看出错打打印,  可以看到正常连接情况下,数据是会走ncm0接口的(这是一个IPV6的网络接口),但出错情况下就没有走ncm0,而是走的lo,这是Linux下默认的回环网卡,通过这个接口是肯定不能正常发送网络包给iPhone的。 ## 分析 可以看到正常情况下是会调用`SetupInterfaceList`这个函数的,由于对bonjour代码不熟,只能硬啃了,猜测这个函数应该就是在某种情况会更新网络接口链表,而出错的情况下没有更新链表,所以才导致连不上,那就看这个函数是哪里调用就可以了。 分析可以看到在程序启动初始化时会调用一次 ```C mDNSexport mStatus mDNSPlatformInit(mDNS *const m) { //... // Tell mDNS core about the...
下面以ARM64架构分析mmap映射过程 ``` C // sys.c asmlinkage long sys_mmap(unsigned long addr, unsigned long len, unsigned long prot, unsigned long flags, unsigned long fd, off_t off) { if (offset_in_page(off) != 0) //检查偏移是不是页的整数倍...
https://alanhou.org/ffmpeg/ ffmpeg -f avfoundation -i 1 -r 30 out.yuv //试用于MAC平台 ffmpeg -f fbdev -framerate 10 -i /dev/fb0 out.avi //out of x server in the command line -f 指定avfoundation 采集数据 -i...
##安装 不要用apt install方式安装,踩过的坑。。最好用源码安装。 ``` $ sudo apt remove systemtap $ sudo apt install g++ make git libelf-dev libdw-dev $ git clone git://sourceware.org/git/systemtap.git $ cd systemtap/ $ ./configure && make //...
## samba服务 ### 安装samba ```shell sudo apt install samba samba-common ``` ### 配置samba 打开/etc/samba/smb.conf文件,并在文件末尾添加如下内容: ```shell [share] comment = share folder available = yes browseable = yes public = yes writable...
## 变量替换 1、${变量#匹配规则} # 从头开始匹配,最短删除 ```shell variable_1="I love you ,Do you love me" var1=${variable_1#*ov} echo $var1 e you ,Do you love me ``` 2、${变量##匹配规则} # 从头开始匹配,最长删除 贪婪模式 ```shell var2=${variable_1##*ov} echo...
## 调试QEMU本身 为了调试QEMU,可以下载一个精简的镜像。 wget http://wiki.qemu.org/download/linux-0.2.img.bz2 ### 启动GDB,开始调试 #### 方法一 > gdb --args qemu-system-x86_64 -enable-kvm -m 4096 -smp 4 linux-0.2.img 这种方法有个缺点,就是只能调试qemu的启动过程,当qemu启动完后,或者说Guest OS启动完成后,就无法在终端中输入GDB命令了。 #### 方法二 可以使用另外一种方式来调试启动完成的qemu。 首先找到qemu进程PID。 > ps -A | grep...
最近在学习QEMU源码,碰到了GCC属性相关知识,在此记录下。 ```C /* This should not be used directly. Use block_init etc. instead. */ #define module_init(function, type) \ static void __attribute__((constructor)) do_qemu_init_ ## function(void) \ { \ register_module_init(function, type); \...