1. 程式人生 > >【迅為iTop4412學習筆記】2. make menuconfig即Kconfig的仿寫(簡單說說,但是很重要)

【迅為iTop4412學習筆記】2. make menuconfig即Kconfig的仿寫(簡單說說,但是很重要)

在寫第5篇的註冊驅動的時候,發現還是要寫一下這裡,這裡其實就圍繞了Kconfig展開

make menuconfig 是圖形化配置介面,Kconfig是真正背後修改的檔案。

看一下linux的結構會發現,目錄裡有個Kconfig,而它包含了子目錄下的Kconfig,子目錄的Kconfig又包含了他的子目錄的Kconfig。

到此其實應該就明白了,linux原始碼是分層的,每一層裡都有一個Kconfig檔案。

舉個例子,老闆手下有3個經理,每個經理手下有5個組長,每個組長手下有10個人。老闆當然不會管理所有人(難管理+累),大家都管好自己的手下即可,這樣也就管理了所有人。

make menuconfig就是從主目錄的Kconfig(老闆)開始搜尋,一層一層(老闆->經理->組長->組員)的搜下去,這樣,整個linux就全部呈現在眼前了,我們裁剪linux,也就是選擇需要的,剔除不要的。

在註冊驅動的時候,需要定義的巨集定義就是在本章節仿照已有的LEDS來仿寫的。

一方面是為了配置巨集定義,一方面也是在make menuconfig中新增選項。

因為仿寫的是LEDS,LEDS是字元裝置,路徑是drivers/char,而我們需要修改的是字元裝置裡的Kconfig

vim drivers/char/Kconfig

搜尋LEDS 然後仿寫一個就行了,我這就叫MRYANG_CTL吧

config LEDS_CTL
        bool "Enable LEDS config"
        default y
        help
          Enable LEDS config

config MRYANG_CTL
        bool "Enable MRYANG config"
        default y
        help
          Study Kconfig

下面這個就是我仿寫的,bool表示開關兩個選項,還有三個選項的叫tristate,這個百度搜一下,都很簡單。
這裡的定義在註冊裝置時至關重要,請記住你定義的巨集定義的名字…

=========================================================

東西比較簡單,稍微記錄一下,有空再來完整寫。
以下只是個草稿

虛擬機器Ubuntu版
linux核心參考:https://yq.aliyun.com/articles/594992?utm_content=m_50735
wget https://cdn.kernel.org/pub/linux/kernel/v4.x/linux-4.19.2.tar.xz
xz -d .tar.xz
tar -xvf .tar
cd linux

sudo apt-get install git fakeroot build-essential ncurses-dev xz-utils libssl-dev bc flex libelf-dev bison
cp /boot/config-$(uname -r) .config
make menuconfig
ssh視窗要夠大 不然顯示不了會失敗

/Device Drivers/Character devices

vim drivers/char/Kconfig

make menuconfig就有了