首页 > TAG信息列表 > initcall

设备驱动-模块-module_init宏解析

module_init  这个宏定义在  include/linux/module.h module 的含义,即 模块; 有两类:  builtin  的模块 (存在在 Image 中) 或者  独立的模块(存在在  xx.ko 中)   根据当前在编译 builtin 还是 编译 独立模块, module 宏有不同的 定义 80#ifndef MODULE 89#define module_i

解决linux的驱动用insmod 方法测试可以,但静态编译到内核不能正确使用的问题

在写wk2312的驱动,刚开始用IMX8MM的硬件SPI进行SPI转串口的驱动。前面被CS引脚困住了一周,无奈只能用软件模拟使用。现在又遇到一个问题,在测试的时候用insmod的方法是可以正使看到sttyWK0与sttyWK1的,但放到内核里面进行编译,尝试静态加载这个SPI转串口驱动,结果,CS脚死活申请不了资源。

kernel——module

模块机制让kernel有伸缩性,既保有宏内核的高效,又有一定微内核的稳定性。 1. 单个模块 1.1 模块的编译 1.1.1 源码树内编译 在源码树内添加模块 linux-5.16.2# touch drivers/char/hello.c #include <linux/init.h> #include <linux/modules.h> static int __init hello_init(void)

linux内核中模块加载的顺序

在//include/linux/init.h中定义了模块初始化的优先级 点击查看代码 /* * Early initcalls run before initializing SMP. * * Only for built-in code, not modules. */ #define early_initcall(fn) __define_initcall(fn, early) /* * A "pure" initcall has no dependen

Linux内核 eBPF基础:perf(1):perf_event在内核中的初始化

Linux内核 eBPF基础 perf(1):perf_event在内核中的初始化 荣涛 2021年5月12日 本文相关注释代码:https://github.com/Rtoax/linux-5.10.13 1. 初始化函数调用关系 1.1. start_kernel 可参见《Linux开机启动过程(10):start_kernel 初始化(至setup_arch初期)》系列文章。 在

linux文件系统初始化过程(4)---加载initrd(中)

一、目的    上文详细介绍了CPIO格式的initrd文件,本文从源代码角度分析加载并解析initrd文件的过程。    initrd文件和linux内核一般存储在磁盘空间中,在系统启动阶段由bootload负责把磁盘上的内核和initrd加载到指定的内存空间中;然后,再由内核读取和解析initrd文件,在VFS(目前只

Linux内核概念:per-CPU,cpumask,inicall机制,通知链

Linux内核概念 per-CPU,cpumask,inicall机制,通知链 rtoax 2021年3月 在英文原文基础上,针对中文译文增加5.10.13内核源码相关内容。 1. Per-cpu 变量 Per-cpu 变量是一项内核特性。从它的名字你就可以理解这项特性的意义了。我们可以创建一个变量,然后每个 CPU 上都会

Linux数据报文接收发送总结4

二、系统初始化   Linux驱动,内核协议栈等等模块在具备接收网卡数据包之前,要做很多的准备工作才行。比如要提前创建好ksoftirqd内核线程,要注册好各个协议对应的处理函数,网络设备子系统要提前初始化好,网卡要启动好。只有这些都Ready之后,我们才能真正开始接收数据包。那么我们现在

C 动态注册 分散加载

前言 在C语言里,程序的初始化逻辑,通常来说,都是在某个地方(比如 说是main函数中),显式地去主动去调用某一个设备的初始化函数。 比如现在系统里,有一个LED,一个Key,通常需要在main里面去显式地对其初始化。 void main(void){     InitLed();     InitKey(); } 一、问题背景  

linux modules模块启动顺序

  正常情况使用的是    module_init() ,有时候需要早一些或者晚一点加载驱动 ,内核中也是有对应的函数调用   参考  https://blog.csdn.net/u014626722/article/details/83653911   一、Include/linux/init.h中: /* initcalls are now grouped by functionality into separ

subsys_initcall

subsys_initcall linux子系统的初始化_subsys_initcall():那些入口函数【转】    https://blog.csdn.net/u010388659/article/details/81265010      内核选项的解析完成之后,各个子系统的初始化即进入第二部分—入口函数的调用。通常USB、PCI这样的子系统都会有一个名为

linux_module机制

1.模块相关指令 1.1 指令介绍 1.1.1 modinfo 功能:静态查看模块文件的基本信息,不需要安装到内核中即可查看。 语法:modinfo 模块名 测试: [root@localhost char]# modinfo tiny4412_hello_module.ko filename: tiny4412_hello_module.ko license: GPL depends:

initcall 宏阅读笔记

linux4.14.39include/linux/module.h 中: #define module_init(x) __initcall(x);#define module_exit(x) __exitcall(x); linux4.14.39/include/linux/init.h 中: /* * __initcall中指定的每一个函数指针的名字都是不同的 */#define __initcall(fn) device_initcall(fn)/*

内核对设备树的处理(四)__device_node转换为platform_device

前言:以前写驱动程序时候,一般把驱动程序分成两部分platform_device跟platform_driver这两部分, platform_device:描述硬件使用的资源; 在前面文章介绍过设备树dts文件最终在linux内核中会转化成platform_device: dts -> dtb -> device_node -> platform_device 本文章主要解决下面