linux3 核心的 setup函式

2021-08-04 07:16:21 字數 1352 閱讀 9055

在核心**中經常會看到__setup函式,這個函式從哪來,到哪去?下面我們逐一分析

例如在i2c驅動中就有這麼乙個setup函式:

__setup("i2c_bus=", omap_i2c_bus_setup);

我們先要直到它是從哪來的:看如下**:

#define __setup_param(str, unique_id, fn, early)			\

static const char __setup_str_##unique_id __initconst \

__aligned(1) = str; \

static struct obs_kernel_param __setup_##unique_id \

__used __section(.init.setup) \

__attribute__((aligned((sizeof(long))))) \

= #define __setup(str, fn) \

__setup_param(str, fn, fn, 0)

可以清除的看出來__setup函式最後被巨集替代成__setup_param函式,去掉紛繁複雜的各種連線。我們利用__setup("reset_devices", set_reset_devices);看看最終的表達形式是什麼

static const char __setup_str_omap_i2c_bus_setup= "i2c_bus=";

static struct obs_kernel_param __setup_omap_i2c_bus_setup =

而最終的函式實現體現在初始化函式中如下:

static int __init obsolete_checksetup(char *line)

else if (!p->setup_func) else if (p->setup_func(line + n))

return 1;

} p++;

} while (p < __setup_end);

return had_early_param;

}

這裡的意思是從__setup_start開始處到__setup_end處中查詢乙個資料結構,這個資料結構中有str與setup_func這兩個資料成員變數. 只要與這裡面的str與輸入的引數字串相匹配,就會呼叫個這個字串後面所指的內容.意思也就是呼叫

omap_i2c_bus_setup
函式,而這個函式應該在你的**中體現出來的。自己的初始化函式。

Linux核心中 setup的用途

在linux核心 中經常會看到 setup,如下所示 setup nfsroot nfs root setup 這是乙個巨集,它的定義在include linux init.h define setup str,fn setup param str,fn,fn,0 我們這裡暫不管 setup par...

linux核心的 setup巨集的學習

第一次看到這個巨集的時候是在 setup root root dev setup 這個巨集是在核心掛載根檔案系統的時候呼叫的 先看 setup的定義 define setup str,fn setup param str,fn,fn,0 然後是 setup param的定義 define setup...

如何系統的學Linux 3

3,你看完系統自帶的文件了嗎?當你完成入門的過程後,就可以開始讀其他的文件,然後到論壇的精華區看看,向你建起來的大樓框架中添磚頭了.當然 首先要讀的,還是系統自帶的文件.絕大多數linux發行版都自帶非常詳細的文件.比如我一直在用的redhat,他有從系統安裝到系統安全,針對不同層次的人的詳盡文件....