Re: [问题] __initdata 和 __init

楼主: zzLin (zzlin)   2014-07-16 08:17:47
1.不加上 __init会不会有什么影响呢?
我想是不会的,系统依然可以正常运做
2.加上init的目的是希望将相同类似只执行过一次之后
就再也用不到的code放在同一个section,而且是在4K
boundry上面,这样子在开完机的最后就可以把这一区块
free掉,变成可以再利用
3.不是加上__init就会使这个函式只被执行一次
是因为这个函式只会被执行一次,所以才加上init让他执行完
可以被一起free掉
※ 引述《gn00618777 (非常念旧)》之铭言:
: ※ [本文转录自 C_and_CPP 看板 #1JnJQ54O ]
: 作者: gn00618777 (非常念旧) 看板: C_and_CPP
: 标题: [问题] __initdata 和 __init
: 时间: Tue Jul 15 22:11:13 2014
: 在 kernel 的程式里看到函式有 __initdata 以及 __init 属性
: 上网查了一下,只要函式加了这两个,代表函式只会执行一次之后就被丢出
: 内存...函式里面的东西会放在.init.text的section中 ←这什么鬼= =?
: =====================================================================
: 以下为 kernel porting 的范围 也是关于C语言
: static struct i2c_board_info __initdata am335x_i2c0_boardinfo[] 和
: static struct i2c_board_info am335x_i2c1_boardinfo[],为啥有分 __initdata 和
: 没有 __initidata? 有啥差别吗? 假设我device都不在 i2c0 上,我可以直接将
: static struct i2c_board_info __initdata am335x_i2c0_boardinfo[] 改成
: static struct i2c_board_info __initdata am335x_i2c1_boardinfo[] 吗?
: 加了__initdata 的初始化 i2c1 的函式执行过后,上面的devices就不能透过i2c1了吗?
: 谢谢。
作者: powertodream (The Beginning)   2014-07-16 09:34:00
不加__init, 在kernel init stage的时候会跑不到吧?一开始有一段时间会去init section 逐序跑过里面像是一些driver的 __init
楼主: zzLin (zzlin)   2014-07-16 17:17:00
楼上正解
作者: yvb   2014-07-16 19:15:00
非正解. 可能把 __initcall 相关系列和 __init 搞错了?
作者: gn00618777 (非常念旧)   2014-07-16 21:09:00
谢谢各位,其实我想问为何i2c0要加init而i2c1却不用
作者: yvb   2014-07-17 13:57:00
因为i2c0在init阶段的注册动作,会找块内存复制过去,所以init阶段结束后,占用空间可释放掉.加了 __init 和 __initdata 就是 init阶段结束时, 会被释放掉.

Links booklink

Contact Us: admin [ a t ] ucptt.com