
系统其它
redwingz
这个作者很懒,什么都没留下…
-
原创 内核earlyprintk选项
通过设置early_printk选项,可以在内核串口设备初始化之前,看到打印输出,对于调试内核早期的启动问题非常有帮助。如下可在grub命令行中,手动加载启动内核,增加内核参数:grub> grub> linux \(hd0,msdos2)/vmlinuz earlyprintk=ttyS0,115200grub> grub> bootgrub> 对于x86平台,内核函数setup_early_printk处理earlyprintk选项,解析earlyprintk2020-12-28 21:42:5938
0
-
原创 内核的中断分布
对于x86架构,定义位于arch/x86/include/asm/irq_vectors.h文件中,linux每可使用的有256个IDT(Interrupt Descriptor Table)表项,64位架构每个CPU有一个IDT表,32位架构共享一个IDT表,其分布如下: * Vectors 0 ... 31 : system traps and exceptions - hardcoded events 系统陷阱和异常中断向量 * V2020-10-20 20:06:06144
0
-
原创 使用git sendmail发送补丁
这里使用iproute2工程为例,以下命令安装git-email工具。$ sudo apt-get install git-emailiproute2当前版本是5.8.0,其中文件tc/q_fq.c中有一处笔误。修改完成之后,使用如下命令生成patch文件:$ git format-patch HEAD^0001-tc-fq-clarify-the-length-of-orphan_mask.patch$ 接下来设置git-email相关配置,这里以126邮箱为例:$ git config2020-10-14 21:09:35129
0
-
原创 内核红黑树-II
还是先列一下红黑树的5个准则。A node is either red or black节点的颜色非红即黑The root is black根节点为黑色All leaves (NULL) are black所有的叶子(NULL)节点都为黑色Both children of every red node are black红色节点的子节点都为黑色Every simple path from root to leaves contains the same number of black n2020-09-23 20:30:48116
0
-
原创 内核红黑树-I
内核中许多部分使用到红黑树,比如tcp的乱序队列out_of_order_queue,TC中fq公平队列的流表等。以下为红黑树的5个准则:A node is either red or black节点的颜色非红即黑The root is black根节点为黑色All leaves (NULL) are black所有的叶子(NULL)节点都为黑色Both children of every red node are black红色节点的子节点都为黑色Every simple path f2020-09-19 06:37:3581
0
-
原创 内核文件句柄数量
涉及三个文件file-max,file-nr和nr-open。file-maxfile-max定义了Linux内核可分配的最大数量的文件句柄,当检测到文件句柄耗尽时,需要增加file-max值。/ # cat /proc/sys/fs/file-max1597700内核函数files_maxfiles_init计算系统默认的最大文件数量,依据是每个文件及与其关联的inode和dcache结构,总的大小约为1K。默认文件占用的空间不超出内存的10%,file-max的最小值为NR_FILE,即812020-08-10 19:43:21158
0
-
原创 rtnetlink消息解析遇到的问题记录
折腾了两天一个解析rtnetlink消息的程序,总是莫名其妙的crash,最终发现是rtattr数组定的时候忘记了加一。之后,查看了一下iproute2中的代码,如下解析IP地址的函数,rta_tb数组的个数为:IFA_MAX+1,进行了加一操作。int print_addrinfo(const struct sockaddr_nl *who, struct nlmsghdr *n, void *arg){ struct ifaddrmsg *ifa = NLMSG_DATA(n); i2020-07-15 22:07:5899
0
-
原创 本地挂载openwrt镜像
以下编译了一个X86-64平台的openwrt镜像,完成之后在bin/targets/x86/64目录下文件,主要由内核文件,和两个根文件系统文件,格式分别为ext4和squashfs,还有两个内核与文件系统打包在一起的镜像文件(ext4和squashfs两种格式)。$: ~/openwrt/bin/targets/x86/64$ ls -ltotal 27360drwxr-xr-x 4 k...2020-04-06 21:19:431216
0
-
原创 Plone安装
在虚拟机上全新安装的Ubuntu环境:$ cat /etc/issueUbuntu 18.04.4 LTS \n \l~$获取Plone版本5.2.1,并进行解压。$ mkdir work$ cd work/$ $ wget https://launchpad.net/plone/5.2/5.2.1/+download/Plone-5.2.1-UnifiedInstaller-...2020-02-19 19:33:41120
1
-
原创 内核升级抢占配置选项问题
一直使用的是2.4的比较旧的内核,在升级到4.15的新内核之后,之前运行稳定的代码一直有各种死锁的情况发生。如下所示,大致原因都是一样的,如下对于同一个读写锁,有的地方并没有锁住下半部,导致问题的发生。[249739.328755] RIP: 0010:[<ffffffff8143128e>] [<ffffffff8143128e>] __read_lock_faile...2019-12-05 19:08:19122
0
-
原创 ubuntu创建自签名证书
系统版本:Ubuntu 17.04。首先生成一个RSA私钥:$$ mkdir private$ $ openssl genrsa -out private/cakey.pem 2048Generating RSA private key, 2048 bit long modulus......................................................2019-12-02 19:30:06678
0
-
原创 使用strace定位死循环
首先通过top命令发现pworker进程的CPU占用率接近100%,如下: # topRun Time: 0 days, 0 hours and 59 minutes24U, 25S, 49I; mem: T:64040 F:61472 A:61159 C:120 SC:0 ST:0 SF:0 pworker 399 R 99.9 0.0...2019-08-07 20:45:16187
0
-
原创 内核IRQ中断向量
首先看一下vector_irq的定义,此每处理器数组变量,保存每个处理器上中断向量所对应的中断号,其以中断向量值为索引。系统中定义了256个中断向量。相关代码如下:typedef int vector_irq_t[NR_VECTORS];DEFINE_PER_CPU(vector_irq_t, vector_irq) = { [0 ... NR_VECTORS - 1] = VECT...2019-08-01 19:45:11607
0
-
原创 Control Group v2版本
本文是关于cgroup v2版本的设计、接口和协定方面的官方文档。描述了cgroup的核心和特定控制器行为在用户层面可见的方方面面。并且cgroup所有之后的改动都将在此文档中体现,v1版本的文档位于内核的Documentation/cgroup-v1/目录。This is the authoritative documentation on the design, interface and ...2019-08-04 23:01:10434
0
-
原创 Python实现的HTTP并发测试程序
可修改变量thread_count指定最大的并发数量,即线程的数量。完成之后,打印输出失败的次数,以及开始时间和结束时间,单位是毫秒。主要是学习一下Python,仅供参考。#!/usr/bin/python3import sys, time, json, _threadimport http.client, urllib.parsethread_count = 100 #并...2019-07-09 20:47:472780
0
-
原创 Open Network Install Environment工程概述
概述工程概述开源倡议Open Network Install Environment (ONIE) 旨在为现代网络硬件设备提供一个开放的"安装环境"。ONIE塑造了一个开放的网络硬件生态,终端用户可自由选择不同的网络操作系统。在ONIE出现之前,市面上的以太网交换设备有着预装的,受控的操作系统,以及实质上完成的网络应用,所有这些将终端用户固定在了一个垂直的供应链上。最初,ONIE依靠对多个...2019-06-22 21:57:44278
0
-
原创 GCC版本不同导致程序执行结果迥异
之前运行正常的一段代码,在升级了编译工具链后出现异常,最后发现是gcc的版本不同,导致编译出来的代码执行结果迥异。如下的代码为根据这个问题写的一段简单的测试程序。src指向一段数据,此段数据为长度+内容的组合(第一个字节为长度,其后为此长度的内容)。unsigned char get_length(unsigned char **src_p){ unsigned char ret =...2018-08-17 16:02:153655
3
-
原创 利用交换机分开上下行流量
配置两台华为交换机,实现在拓扑中仅一个方向的流量通过LINUX网桥,PC-A(10.75.101.1)到PC-B(10.75.200.1)的流量经过LINUX网桥B,PC-B到PC-A的流量经过LINUX网桥A。交换机-A配置<HUAWEI><HUAWEI>system-view Enter system view, return user view wit...2018-09-04 13:37:511049
0
-
原创 container_of注意事项
已知一个变量的地址时,使用container_of获取此变量所在的结构体的首指针。其定义如下:#define container_of(ptr, type, member) ({ \ void *__mptr = (void *)(ptr); \ BUILD_BUG_ON_MSG(!__same_type(*(ptr...2018-08-29 23:29:23991
0
-
原创 根据PANIC信息定位内核代码位置
首先Linux内核需要打开编译的调试选项CONFIG_DEBUG_INFO,如下:Kernel hacking ---> [*] Kernel debugging [*] Compile the kernel with debug info这样,内核在编译之后的目标文件带有调试信息。检查内核的Makefile文件,打开CONFIG_DEBUG_INFO选项之后,内核为...2018-11-14 23:04:38816
0
-
原创 UDEVD与内核交互
内核依据固定的标准与初始化次序命名设备,例如以太网设备,按照初始化次序命名为eth0、eth1等。UDEVD程序的存在,可以动态的添加/删除linux系统的设备节点,可以使用户定制化设备节点名称,创建设备链接等。使用udevd,需要配置以下内核选项:udevd要求: 内核支持sysfs, procfs, signalfd, inotify, unix domain sockets, ...2018-11-20 17:20:59631
0
-
原创 内核与用户层交互两种方式
除去通常的netlink机制之外,本文介绍两种内核主动发起与用户层的交互机制。类似ioctl、proc文件操作或者socket类等用户层发起的与内核交互操作不在此讨论。内核调用用户层应用程序,使用函数call_usermodehelper实现,其参数为用户层应用程序的目录path,需要传递的参数argv、环境参数envp和参数wait。最后一个参数wait可指定是否需要等待应用程序执行完成,设...2018-12-14 18:27:401506
0
-
原创 使用linaro工具链编译ARM64架构内核
首先下载linaro预编译好的arm64工具链,如下:# mkdir aarch64-toolchain# cd aarch64-toolchain# wget https://releases.linaro.org/components/toolchain/binaries/5.3-2016.02/aarch64-linux-gnu/gcc-linaro-5.3-2016.02-x86...2019-01-23 18:03:333320
2
-
原创 交叉编译龙芯版本内核
依据内核系统的自带的默认龙芯配置,编译系统内核3.10,配置文件:arch/mips/configs/fuloong2e_defconfig交叉编译工具链4.9.3 rc6.1版本,下载地址如下:http://ftp.loongnix.org/toolchain/gcc/release/cross-gcc-4.9.3-n64-loongson-rc6.1.tar.bz2本地编译...2019-01-14 16:22:222584
0
-
原创 ARM架构生成uImage过程
内核编译完成之后首先在顶层目录中生成vmlinux名称的原始ELF文件,接着在arch/arm/boot/Makefile文件中,使用objcopy工具,将vmlinux转化为Image镜像,用到的参数由变量OBJCOPYFLAGS和$(OBJCOPYFLAGS_$(@F)指定,makefile编译目标位于scripts/Makefile.lib文件中。arch/arm/boot/Makef...2019-04-16 20:22:53802
0
-
原创 Ubuntu 17.04系统git LFS安装及使用
github不允许存储超过100MB的单个文件,但是提供了git的大文件存储Large File Storage扩展功能。本文假设你已经安装了git。$ git push -u origin masterUsername for 'https://github.com': usernonexistPassword for 'https://usernonexist@github.c...2019-05-21 19:31:422157
0
-
原创 数组越界问题
如下代码,对于两个局部数组遍历s1和s2,其中s1的大小为4,而字符串“test”在给其赋值时,将导致最后的结束符赋值到紧随其后的s2数组的开始。而后,在数组s2赋值时,第二个字符串“test”的第一个字符t由将覆盖之前的结束符。#include <stdio.h>#include <string.h>int main(){ char s1[4] = ...2019-05-30 19:59:361057
0
-
原创 SecureCRT触发打印机工作
Windows 10操作系统。SSH客户端软件:VanDyke SecureCRT版本:Version 8.0.3 (x64 build 1183) - Official Release - September 8, 2016使用SSH连接到远程的某一台服务器上。urls-file文件中保存有要下载的文件的URL列表,每个文件一行。以下命令本意是打算使用curl下载url...2019-06-05 19:51:051150
0
-
原创 PROC文件中stat统计信息
翻译文件Documentation/filesystems/proc.txt的1.8节,关于/proc/stat文件内容的描述: 1.8 位于/proc/stat文件中的内核杂项统计-------------------------------------------------内核在文件/proc/stat中保存了有关自身活动的各种信息。所有的统计数字都是自系统启动后累加起来的。使...2018-08-11 00:29:121355
0