包含标签 Kernel 的文章

insmod详解

insmod && module_init insmod 会调 module_init,但未必会调 module_init。 一个内核模块可以没有 module_init,即不初始化、不注册任何东西……

阅读全文

LWP

参考 linux线程剖析(Part1)—1个“假“的tcb Linux下的LWP(轻量级进程)、进程 、 线程、用户级线程、内核线程……

阅读全文

ping data-path

data path data path 应用层 busybox/ping.c ping_main() common_ping_main() ping() create_icmp_socket() // socket(AF_INET, SOCK_RAW, 1); ping4() sendping4() sendping_tail() xsendto() sendto() // 系统调用 -------------------- 内核 网络 net/socket.c __sys_sendto() // sendto() 在内核的系统调用服务程序为 __sys_sendto() sock_sendmsg() sock_sendmsg_nosec() raw_sendmsg() // sock->ops->……

阅读全文

socket 知识汇总

参考 sockaddr和sockaddr_in详解 sockaddr 和 sockaddr_in 二者占用的内存是一样的,可以相互转化。 深入理解TCP协议及其源代码-send和recv……

阅读全文

Linux内核源码目录介绍

内核源码目录 liyongjun@Box:~/project/board/buildroot-2021.05/override/linux-5.10.9$ tree -L 1 -d . ├── arch // 此目录下所有子目录都是体系架构特有的代码。每个体系架构特有目录下面至少包含 3 个子目录:kernel、lib……

阅读全文

strace 实例分析

例子 test1.c #include <stdio.h> int main(int argc, char **argv) { printf("hello world\n"); return 0; } $ strace ./test1.out execve("./test1.out", ["./test1.out"], 0x7ffd55864680 /* 62 vars */) = 0 brk(NULL) = 0x5628470b5000 arch_prctl(0x3001 /* ARCH_??? */, 0x7ffc7495aeb0) = -1 EINVAL (无效的参数) access("/etc/ld.so.preload", R_OK) = -1 ENOENT (没有那个文件或目录) openat(AT_FDCWD, "/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3 fstat(3, {st_mode=S_IFREG|0644, st_size=83237,……

阅读全文

SPL 的由来,一切为了自举

ARM 的启动流程 bootRom –> SPL –> uboot –> kernel –> file system –> init 为什么要有 SPL ARM 的启动流程如上,其中有一阶段是 SPL,今天我们就来探究下,为什么要有 SPL ? CPU、内存、磁盘……

阅读全文

SPL 启动流程

版本 uboot-2018.07 u-boot.lds OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm") /* 输出文件格式为 elf32-littlearm */ OUTPUT_ARCH(arm) /* 输出架构为 ARM */ ENTRY(_start) /* 指定整个程序的入口地址为 _start,这里跳转到 vector.S 执行 */ SECTIONS { /DISCARD/ : { *(.rel._secure*) } . = 0x00000000; /* 指定可……

阅读全文