Linux Kernel
文章平均质量分 88
hello_courage
8年USB开发经验 + 5年网络及以太网驱动开发经验 + 2年PCIe驱动开发经验 + 4年romcode开发经验,专注网卡驱动、网络协议(TCP/IP)、USB驱动及应用开发。
展开
-
linux kernel 三次握手建立TCP链接的实现
1. 应用层1.1 serversocket() -> bind() -> listen() -> accept() -> recv() & send()1.2 clientsocket() -> connect() -> send() & recv()1.3 三次握手建立连接(1) 客户端发送一个 SYN 段(SYN 标志位置位),包含初始序号 ISN,在图中,这个序号的值 seq = 2379453...原创 2021-11-17 18:13:27 · 641 阅读 · 0 评论 -
linux kernel defconfig和.config
在Linux内核里,编译内核文件时,先要配置.config文件,然后Makefile在编译时通过读取.config文件的配置来选择要编译的文件,选择驱动的加载方式。 xxx_defconfig 一般在arch/arm64/configs/目录下,是一个没有展开的内核配置,需要配合Kconfig展开成.config 从defconfig到.config不是简单的复制操作,而是makeARCH=arm64defconfig .confg也不是直接拷贝成defconfig,而...原创 2020-11-09 20:47:37 · 1593 阅读 · 0 评论 -
linux dynamic debug(linux动态调试)
https://www.kernel.org/doc/Documentation/admin-guide/dynamic-debug-howto.rstDynamic debug is designed to allow you to dynamically enable/disablekernel code to obtain additional kernel information.Currently, if CONFIG_DYNAMIC_DEBUG is set, t...原创 2020-10-12 18:12:50 · 1825 阅读 · 0 评论 -
linux kernel printk log(以及dev_dbg)
The smaller the num value, the higher the log priority.1.view loglevel# cat /proc/sys/kernel/printk94179:console_loglevel, messages with a priority higher than this value are printed to the console4:default_message_lo...原创 2020-09-08 19:44:09 · 1151 阅读 · 0 评论 -
如何将rootfs打包进kernel image
首先通过menuconfig或.config配置rootfs.cpio.gz的路径configureCONFIG_INITRAMFS_SOURCE="path to rootfs.cpio.gz"for example, in .config:然后需要1)build roofs first2)then build kernelok!!原创 2020-08-01 10:59:27 · 1560 阅读 · 0 评论 -
ioremap介绍及用法
ioremap: mapphysical address to kernel virtual address, we can usekernel virtual address to access register.1.get physical addressrsc_p = platform_get_resource(Platform_Device_p, IORESOURCE_MEM, p->ResId);p->PhysBaseAddr = rsc...原创 2020-07-05 10:36:07 · 3776 阅读 · 0 评论 -
ARM内存屏障 (memory barrier)
barrier.h#define isb() asm volatile("isb" : : : "memory")#define dmb(opt) asm volatile("dmb " #opt : : : "memory")#define dsb(opt) asm volatile("dsb " #opt : : : "memory")#define csdb() asm volatile("hint #20" : : : "memory...原创 2020-06-05 17:05:30 · 3289 阅读 · 0 评论 -
make modules 和 make modules_install
1. make modules如:make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- modules直接make,不加任何参数,就是make all,包含make modules。make modules是单独编译模块,驱动被配置成M的都是modules,modules不会被编译进内核image,需要单独安装到rootfs。2.make modules_install是把编译好的模块拷贝到系统目录下(一般是/lib/mod...原创 2020-05-09 16:15:03 · 19006 阅读 · 0 评论 -
build linux kernel
一、首先安装toolchains1.download LinarotoolchainsLinarotoolchains是由Linaro公司基于GCC推出的的ARM交叉编译工具。可用于交叉编译ARM系统中所有环节的代码,包括裸机程序、u-boot、Linux kernel、filesystem和App应用程序。当然,也可以选用gcctoolchains。网址:https://www.linaro.org/downloads/https://releases.linaro....原创 2020-05-09 16:12:39 · 2098 阅读 · 0 评论 -
linux kernel: defconfig和.config
在Linux内核里,编译内核文件时,先要配置.config文件,然后Makefile在编译时通过读取.config文件的配置来选择要编译的文件,选择驱动的加载方式。 defconfig 一般在arch/arm64/configs/目录下,是一个没有展开的内核配置,需要配合Kconfig展开成.config 从defconfig到.config不是简单的复制操作,而是make...原创 2020-04-06 17:31:20 · 15980 阅读 · 2 评论 -
内核中引发bug并打印信息
1.dump_stack()会打印函数调用栈,然后继续往下执行2. BUG() or BUG_ON()会打印函数调用栈和寄存器上下文信息,不会继续往下执行3. panic()会打印函数调用栈和寄存器上下文信息,且系统会挂起(无任何响应,表现为卡死,但没有重启)...原创 2020-02-05 11:41:36 · 430 阅读 · 0 评论 -
local_irq_save和 local_irq_disable
1. 关中断可以通过下面两个函数中的其中任何一个关闭当前处理器上的所有中断处理,这两个函数定义在 <asm/system.h>中:void local_irq_save(unsigned long flags);void local_irq_disable(void);local_irq_save的调用把当前的中断状态(开或关)保存到flags中,然后禁用...原创 2020-02-05 11:40:35 · 5477 阅读 · 1 评论 -
中断底半部:softirq、tasklet、workqueue
为了在中断执行时间尽可能短和中断处理需完成大量工作之间找到一个平衡点,Linux 将中断处理程序分解为两个半部:顶半部(top half)和底半部(bottom half)。顶半部完成尽可能少的比较紧急的功能,它往往只是简单地读取寄存器中的中断状态并清除中断标志后就进行“登记中断”的工作。“登记中断”意味着将底半部处理程序挂到该设备的底半部执行队列中去。这样,顶半部执行的速度就会很快,可以服...原创 2020-02-05 11:26:32 · 610 阅读 · 0 评论 -
Linux进程和线程
程序是一组指令及参数的集合,指令按照既定的逻辑控制计算机运行。进程则是运行着的程序,是操作系统执行的基本单位。线程则是为了节省资源而可以在同一个进程中共享资源的一个执行单位。1. 程序和进程C、C++、Java等语言编写的源程序经相应的编译器编译成可执行文件后,提交给计算机处理器运行。应用程序的运行状态称为进程。进程与应用程序的区别在于应用程序作为一个静态文件存储在计算机系统的硬盘...原创 2020-01-12 20:53:25 · 322 阅读 · 0 评论 -
Linux进程调度策略分析
Linux系统是抢占式多任务操作系统,是否要将一个进程立刻投入运行(也就是抢占当前进程),完全由该进程的优先级和是否有时间片来决定。但CFS调度器:抢占时机取决于新的可执行程序消耗了多少处理器使用比,如果消耗的使用比当前进程小:新程序立刻投入运行,抢占当前进程,否则推迟。在Linux中,线程是由进程来实现,线程就是轻量级进程,因此线程的调度是按照进程的调度方式来进行调度的,也就是说线程是基本...原创 2020-01-12 20:46:43 · 975 阅读 · 0 评论 -
kernel并发控制:自旋锁、互斥体、中断屏蔽
1.中断屏蔽(关中断)在单 CPU 范围内避免竞态的一种简单方法是在进入临界区之前屏蔽系统的中断。CPU 一般都具备屏蔽中断和打开中断的功能,这项功能可以保证正在执行的内核执行路径不被中断处理程序所抢占,防止某些竞态条件的发生。具体而言,中断屏蔽将使得中断与进程之间的并发不再发生,而且,由于 Linux 内核的进程调度等操作都依赖中断来实现,内核抢占进程之间的并发也就得以避免了。...原创 2019-12-01 10:56:01 · 1223 阅读 · 4 评论 -
Linux TCP/IP中L4&L3的实现框架:udp send部分
Linux内核版本:3.14 如果需要高清PDF文档,请联系本人。原创 2019-02-17 11:39:39 · 630 阅读 · 0 评论 -
Linux TCP/IP中L4&L3的实现框架:udp recv部分
linux 内核版本:3.14 如果需要高清PDF文档,请联系本人。原创 2019-02-17 11:41:46 · 457 阅读 · 0 评论 -
Linux内核路由表介绍及相关函数
内核对路由表的操作 更新 插入 删除 查找 路由表种类 网络路由表:ip_fib_main_table 本地路由表:ip_fib_local_table 路由缓存:rt_hash_table 策略路由:根据策略支持多张路由表 表项 路由缓存表项:rtable, 一般使用dst_entry,rta...原创 2019-04-08 19:35:52 · 1237 阅读 · 0 评论 -
Linux QoS ingress处理流程
在传统的TCP/IP网络的路由器中,所有的IP数据包的传输都是采用FIFO(先进先出),尽最大努力传输的处理机制。在早期网络数据量和关键业务数据不多的时候,并没有体现出非常大的缺点,路由器简单的把数据报丢弃来处理拥塞。但是随着计算机网络的发展, 数据量的急剧增长,以及多媒体,VOIP数据等对延时要求高的应用的增加。路由器简单丢弃数据包的处理方法已经不再适合当前的网络。单纯的增加网络带宽也不能从根本...原创 2019-06-11 20:58:57 · 1342 阅读 · 0 评论 -
Linux QoS egress处理流程
在传统的TCP/IP网络的路由器中,所有的IP数据包的传输都是采用FIFO(先进先出),尽最大努力传输的处理机制。在早期网络数据量和关键业务数据不多的时候,并没有体现出非常大的缺点,路由器简单的把数据报丢弃来处理拥塞。但是随着计算机网络的发展, 数据量的急剧增长,以及多媒体,VOIP数据等对延时要求高的应用的增加。路由器简单丢弃数据包的处理方法已经不再适合当前的网络。单纯的增加网络带宽也不能从根本...原创 2019-06-11 21:06:38 · 1070 阅读 · 0 评论 -
kernel panic 和 kernel Oops
1.Kernel panic内核错误(Kernel panic)是指操作系统在监测到内部的致命错误,并无法安全处理此错误时采取的动作。这个概念主要被限定在Unix以及类Unix系统中;对于MicrosoftWindows系统,等同的概念通常被称为蓝屏死机。操作系统内核中处理Kernel panic的子程序(在AT&T派生类以及BSD类Unix中,通常为panic())通常被设计用...原创 2019-07-06 09:32:31 · 2465 阅读 · 0 评论 -
GRE tunnel源码分析之发送流程
GRE(Generic Routing Encapsulation,通用路由封装)协议是对某些网络层协议(如IP 和IPX)的数据报文进行封装,使这些被封装的数据报文能够在另一个网络层协议(如IP)中传输。在大多数常规情况下,系统拥有一个有效载荷(或负载)包,需要将它封装并发送至某个目的地。首先将有效载荷封装在一个 GRE 包中,然后将此 GRE 包封装在其它某协议中并进行转发。此外发协议即为...原创 2019-07-06 10:08:34 · 1336 阅读 · 0 评论 -
gre tunnel源码分析之接收流程
GRE(Generic Routing Encapsulation,通用路由封装)协议是对某些网络层协议(如IP 和IPX)的数据报文进行封装,使这些被封装的数据报文能够在另一个网络层协议(如IP)中传输。在大多数常规情况下,系统拥有一个有效载荷(或负载)包,需要将它封装并发送至某个目的地。首先将有效载荷封装在一个 GRE 包中,然后将此 GRE 包封装在其它某协议中并进行转发。此外发协议即...原创 2019-07-06 10:09:42 · 1261 阅读 · 0 评论 -
Linux QoS实现框架:函数调用流程图
分为入口处理和出口处理两部分,具体实现流程如下图:如果需要高清PDF文档,请联系本人。原创 2019-02-17 11:29:10 · 1011 阅读 · 0 评论