__setup宏简介】的更多相关文章

内核组件用__setup宏来注册关键字及相关联的处理函数,__setup宏在include/linux/init.h中定义,其原型如下:             __setup(string, function_handler) 其中:string是关键字,function_handler是关联处理函数.__setup只是告诉内核在启动时输入串中含有string时,内核要去执行function_handler.String必须以"="符结束以使parse_args更方便解析.紧随&qu…
__setup这条宏在Linux Kernel中使用最多的地方就是定义处理Kernel的启动参数的函数及数据结构,宏定义如下: #define __setup(str, fn) \ __setup_param(str, fn, fn, ) #define __setup_param(str, unique_id, fn, early) \ ) = str; \ static struct obs_kernel_param __setup_##unique_id \ __used __sectio…
宏简介 1.C语言在对源程序进行编译之前,会先对一些特殊的预处理指令作解释(比如之前使用的#include文件包含指令),产生一个新的源程序(这个过程称为编译预处理),之后再进行通常的编译 所有的预处理指令都是以#开头,并且结尾不用分号 2.预处理指令分3种 1> 宏定义 2> 条件编译 3> 文件包含 3.预处理指令在代码翻译成0和1之前执行 4.预处理的位置是随便写的 5.预处理指令的作用域:从编写指令的那一行开始,一直到文件结尾,可以用#undef取消宏定义的作用 6.宏名一般用大…
宏简介: 宏是一种批量处理的称谓.一般说来,宏是一种规则或模式,或称语法替换 ,用于说明某一特定输入(通常是字符串)如何根据预定义的规则转换成对应的输出(通常也是字符串).这种替换在预编译时进行,称作宏展开.编译器会在编译前扫描代码,如果遇到我们已经定义好的宏那么就会进行代码替换,宏只会在内存中copy一份,然后全局替换,宏一般分为对象宏和函数宏(下面会详细介绍). 宏的弊端: 如果代码中大量的使用宏会是的编译时间变长. 对象宏: 像这样:#define M_PI 3.1415926535897…
本文转载自:http://blog.csdn.net/lanmanck/article/details/7613305 本文来自: http://blog.chinaunix.net/uid-13798723-id-2871394.html 介绍的很详细,我也正好用了一次__setup(),蛮好用的:),今天回头看main.c,又搜索了一下,分享给大家: __setup( //做了一次完整的盗贼,我毫无修改的抄袭了一次,但有时间会做量身裁减的// from   http://www.linuxf…
本文转载自:http://blog.csdn.net/fdaopeng/article/details/7895037 __setup这条宏在Linux Kernel中使用最多的地方就是定义处理Kernel的启动参数的函数及数据结构,宏定义如下: #define __setup(str, fn) \__setup_param(str, fn, fn, 0) #define __setup_param(str, unique_id, fn, early) \static char __setup_…
版权声明:本文原创,转载需声明作者ID和原文链接地址. Hi!大家好,我是CrazyCatJack.今天给大家带来的是Linux内核启动过程概述.希望能够帮助大家更好的理解Linux内核的启动,并且创造出自己的内核^_^ Linux的启动代码真的挺大,从汇编到C,从Makefile到LDS文件,需要理解的东西很多.毕竟Linux内核是由很多人,花费了巨大的时间和精力写出来的.而且直到现在,这个世界上仍然有成千上万的程序员在不断完善Linux内核的代码.今天我们主要讲解的是Linux-2.6.22…
Linux内核启动过程概述 Linux的启动代码真的挺大,从汇编到C,从Makefile到LDS文件,需要理解的东西很多.毕竟Linux内核是由很多人,花费了巨大的时间和精力写出来的.而且直到现在,这个世界上仍然有成千上万的程序员在不断完善Linux内核的代码.今天我们主要讲解的是Linux-2.6.22.6这个内核版本.说句实话,博主也不确定自己能够讲好今天这个题目,因为这个题目太大太难.但是博主有信心,将自己学会的内容清楚地告诉大家,希望大家也能够有所收获. 1.启动文件head.S和hea…
GNU CC 是一个功能非常强大的跨平台 C 编译器,它对 C 语言提供了很多扩展,这些扩展对优化.目标代码布局.更安全的检查等方面提供了很强的支持.这里对支持支持 GNU 扩展的 C 语言成为 GNU C. 在 Linux 内核中使用了大量的 GNU C 扩展,以致 GNU C 成为了内核唯一的编译器. 1.语句表达式 GNU C 把包含在括号中的复合语句看做是一个表达式,称为语句表达式,它可以出现在任何允许表达式的地方,你可以在语句表达式中使用循环.局部变量等,原本只能在复合语句中使用.例如…
Linux Command Line 解析 0 处理模型 Linux kernel的启动包括很多组件的初始化和相关配置,这些配置参数一般是通过command line进行配置的.在进行后续分析之前,先来理解一下command line的处理模型: 要处理的对象是一个字符串,其中包含了各种配置信息,通常各个配置之间通过空格进行分离,每个配置的表达形式是如:param=value1,value2 或者很简单就是一个rw. 那么kernel就需要提供对这些参数进行处理的处理函数列表.根据参数的作用以及…
常用书目下载地址:http://www.cnblogs.com/pengdonglin137/p/3688029.html 第二章 1.进程上下文和中断上下文(Page20) 当应用程序执行系统调用,造成上下文的切换而进入内核时,内核会代表这个进程执行内核代码.你会经常听到,这种情况称为内核运行于进程上下文中.相反,处理IDE驱动器的中断处理程序(ISR)也是内核代码,但运行时并不代表任何特定的进程.这种情况通常被称为内核运行于中断上下文中. 2.独立处理器.配套芯片组和集成处理器 (Page2…
转载:http://hi.baidu.com/twinspace/item/24365251e837c2948d12edf1 1. gcc的__attribute__编译属性 要了解Linux Kernel代码的分段信息,需要了解一下gcc的__attribute__的编绎属性,__attribute__主要用于改变所声明或定义的函数或数据的特性,它有很多子项,用于改变作用对象的特性.比如对函数,noline将禁止进行内联扩展.noreturn表示没有返回值.pure表明函数除返回值外,不会通过…
1. gcc的__attribute__编译属性 要了解Linux Kernel代码的分段信息,需要了解一下gcc的__attribute__的编绎属性,__attribute__主要用于改变所声明或定义的函数或 数据的特性,它有很多子项,用于改变作用对象的特性.比如对函数,noline将禁止进行内联扩展.noreturn表示没有返回值.pure表明函数除 返回值外,不会通过其它(如全局变量.指针)对函数外部产生任何影响.但这里我们比较感兴趣的是对代码段起作用子项section. __attri…
Table of Contents 1 引导期间的内核选项 2 注册关键字 3 模块初始化代码 引导期间的内核选项 linux运行用户把内核配置选项传给引导记录,然后引导记录再把选项传给内核. 在引导阶段,对parse_args调用两次,负责引导期间配置输入数据. 注册关键字 内核组件可以利用定义在include/linux/init.h中的__setup宏, 注册关键字和相关联的处理函数.以下是其语法: 1: __setup(string, function_handler) string是关…
内核启动并初始化后,最终目的是像Windows一样能启动应用程序,在windows中每个应用程序都存在C盘.D盘等,而linux中每个应用程序是存放在根文件系统里面,那么挂载根文件系统在哪里,怎么实现最终目的运行应用程序? 1.内核运行应用程序步骤: 1.1首先是进入stext函数启动内核: ENTRY(stext): ... ... //启动内核 b start_kernel //跳转start_kernel() 1.2然后进入strat_kernel()初始化: asmlinkage voi…
由于安卓系统比较复杂,开发中会发中会碰见各种小问题,在此做一些记录,只要觉得有必要就会添加进来. 1.触屏鼠标模式和触屏模式 开发android4.3高通400平台时,用atmel_max 640T作为触屏,很奇怪的问题,调好驱动后,系统运行的效果,居然跟鼠标一样,相对运动,网上查询资料几乎没有,大家都很懒啊!查到一个相关的文章,不过转载的多,已不知道到底谁写的了. android4.0与2.3版本的触摸屏驱动调试注意 http://blog.sina.com.cn/s/blog_6a16c0a…
目录 驱动调试(一)-printk 引入 框架 入口console_setup add_preferred_console register_console s3c24xx_serial_initconsole write printk vprintk release_console_sem 打印级别 使用printk 修改打印级别 使用dmesg打印所有日志 测试 小结 参考文档 附录(3.4内核的分析) title: 驱动调试(一)-printk date: 2019/1/9 19:35:1…
我的分析是基于Linux4.15.1 1.看看kernel是如何调用到console初始化函数的: 分两条线: a.start_kernel  -->  console_init   --> call = __con_initcall_start 去调用放在__con_initcall_start和__con_initcall_end之间的所有函数,看看这个区间的有哪些函数. __con_initcall_start = .; *(.con_initcall.init) __con_initc…
在Linux移植之内核启动过程start_kernel函数简析中已经指出了start_kernel函数的调用层次,这篇主要是对具体的tag参数列表进行解析. 1.内存参数ATAG_MEM参数解析 2.命令行参数ATAG_CMDLINE解析,以传入的命令参数bootargs=noinitrd root=/dev/mtdblock3 init=/linuxrc console=ttySAC0为列: 1).noinitrd参数解析过程,当你没有使用ramdisk启动系统的时候,你需要使用noinitr…
转自:https://blog.csdn.net/skyflying2012/article/details/41142801 版权声明:本文为博主kerneler辛苦原创,未经允许不得转载. https://blog.csdn.net/skyflying2012/article/details/41142801 利用工作之便,今天研究了kernel下cmdline参数解析过程,记录在此,与大家共享,转载请注明出处,谢谢. Kernel 版本号:3.4.55 Kernel启动时会解析cmdlin…
引导期间的内核选项     Linux允许用户把内核配置选项传给引导记录,再有引导记录传给内核,以便对内核进行调整.     start_kernel中调用两次parse_args,用于引导期间配置用户输入数据.     parse_param是一个函数,用于解析输入的内核配置选项的参数字符串.字符串的格式为:name_variable=value.寻址特定关键字,并调用对应的函数. 注册关键字:     用宏进行定义: __setup(string, fn) string表示关键字,fn表示关…
首先感谢国家.其次感谢上大的钟莉颖,让我知道了大学不仅有校花,还有校鸡,而且很多时候这两者其实没什么差别.最后感谢清华女刘静,让我深刻体会到了素质教育的重要性,让我感到有责任写写子系统的初始化. 各个子系统的初始化是内核整个初始化过程必然要完成的基本任务,这些任务按照固定的模式来处理,可以归纳为两个部分:内核选项的解析以及那些子系统入口(初始化)函数的调用. 内核选项 Linux允许用户传递内核配置选项给内核,内核在初始化过程中调用parse_args函数对这些选项进行解析,并调用相应的处理函数…
利用工作之便,今天研究了kernel下cmdline參数解析过程.记录在此.与大家共享.转载请注明出处.谢谢. Kernel 版本:3.4.55 Kernel启动时会解析cmdline,然后依据这些參数如console root来进行配置执行. Cmdline是由bootloader传给kernel.如uboot.将须要传给kernel的參数做成一个tags链表放在ram中,将首地址传给kernel,kernel解析tags来获取cmdline等信息. Uboot传參给kernel以及kerne…
1.uboot跳转到内核启动的时候通过环境变量 console设置控制台 (console = ttySAC0表示输出到串口,并从串口结束输入,也可以设置console=tty1,表示输出到LCD,从inputevent接受输入事件) 2.内核用printk打印,printk肯定要调用硬件函数,其通过console参数来确定具体硬件,调用对应的硬件处理函数 在内核中搜索“console=”,可以看到__setup("console=",console_setup),__setup是个宏…
转载于:http://blog.csdn.net/jgdu1981/article/details/8643057 linux启动时uboot传递进console=ttyS0,115200n8的参数 内核中用__setup()宏声明参数处理的方法 关于__setup宏参考 early_param和__setup宏 __setup("console=", console_setup); console_setup函数处理 1.console_cmdline结构体 struct conso…
C的简介 C语言的结构极其紧凑,C语言是一种模块化的编程语言,整个程序可以分割为几个相对独立的功能模块,模块之间的相互调用和数据传递是非常方便的 C语言的表达能力十分强大.C语言兼顾了高级语言和汇编语言的一些特点,既可以像汇编语言那样直接访问硬件的功能,也具有高级语言那样面向用户容易记忆.便于阅读和书写的优点 C语言的可移植性很好,C语言中没有依赖于硬件的输入输出语句,输入输出功能都是通过调用库函数来实现的,所以在一种计算机平台上开发的程序不需要进行修改或者只需要进行简单的修改就可以移植到另外的…
参考<21天学通C++>第14章节,对C++中的宏和模板进行了学习,总结起来其主要内容如下: (1) 预处理器简介 (2) 关键字#define与宏 (3) 模板简介 (4) 如何编写函数模板和模板类 (5) 宏和模板之间的区别 (6) 使用static_assert进行编译阶段检查 **********************************************************************************************************…
要写好C语言,漂亮的宏定义是非常重要的.宏定义可以帮助我们防止出错,提高代码的可移植性和可读性等. 在软件开发过程中,经常有一些常用或者通用的功能或者代码段,这些功能既可以写成函数,也可以封装成为宏定义.那么究竟是用函数好,还是宏定义好?这就要求我们对二者进行合理的取舍. 我们来看一个例子,比较两个数或者表达式大小,首先我们把它写成宏定义: #define MAX( a, b) ( (a) > (b) (a) : (b) ) 其次,把它用函数来实现: int max( int a, int b)…
Linux 内核引导选项简介 作者:金步国 连接地址:http://www.jinbuguo.com/kernel/boot_parameters.html 参考参数:https://www.cnblogs.com/shengs/p/4608441.html 版权声明 本文作者是一位开源理念的坚定支持者,所以本文虽然不是软件,但是遵照开源的精神发布. 无担保:本文作者不保证作品内容准确无误,亦不承担任何由于使用此文档所导致的损失. 自由使用:任何人都可以自由的阅读/链接/打印此文档,无需任何附加…
const,static,extern 简介 一.const与宏的区别: const简介:之前常用的字符串常量,一般是抽成宏,但是苹果不推荐我们抽成宏,推荐我们使用const常量. 执行时刻:宏是预编译 ( 编译之前处理 ),const是编译阶段. 编译检查:宏不做检查,不会报编译错误,只是替换,const会编译检查,会报编译错误. 宏的好处:宏能定义一些函数,方法,const不能. 宏的坏处:使用大量宏,容易造成编译时间久,每次都需要重新替换. 注意:很多Blog都说使用宏,会消耗很多内存,我…