国产精品久久久久影院,成人午夜福利视频,国产精品久久久久高潮,国产精品 欧美 亚洲 制服,国产精品白浆无码流出

Linux移植之配置過(guò)程分析

發(fā)布者:BlissfulCharm最新更新時(shí)間:2024-08-26 來(lái)源: cnblogs關(guān)鍵字:Linux  移植  配置過(guò)程 手機(jī)看文章 掃描二維碼
隨時(shí)隨地手機(jī)看文章

在Linux移植之移植步驟中已經(jīng)將Linux移植的過(guò)程羅列出來(lái)了,現(xiàn)在分析一下Linux的配置過(guò)程,將分析以下兩個(gè)配置過(guò)程:


1、make s3c2410_defconfig分析


2、make menuconfig分析


1、make s3c2410_defconfig分析


首先從頂層Makefile開(kāi)始分析,找到類(lèi)似smdk2410_defconfig的目標(biāo)。找到了%config目標(biāo)。表示后綴為config的目標(biāo)遵循這個(gè)規(guī)則,config %config前面的config是一個(gè)Kconfig關(guān)鍵字,表示一個(gè)配置選項(xiàng)的開(kāi)始。


416    config %config: scripts_basic outputmakefile FORCE

417        $(Q)mkdir -p include/linux include/config

418        $(Q)$(MAKE) $(build)=scripts/kconfig $@

繼續(xù)分析s3c2410_defconfig目標(biāo)的依賴(lài)scripts_basic outputmakefile FORCE


①、scripts_basic 依賴(lài)分析,它同樣是一個(gè)目標(biāo)。它沒(méi)有依賴(lài),其中Q表示如果在命令參數(shù)中輸入V=1則Q=空,表示打印這條規(guī)則,反之則不打印這條規(guī)則;MAKE=make在系統(tǒng)參數(shù)中定義的。


328    scripts_basic:

349        $(Q)$(MAKE) $(build)=scripts/basic

build這個(gè)變量是一個(gè)通用的變量,它定義在$(srctree)/scripts/Kbuild.include文件中,srctree為L(zhǎng)inux內(nèi)核所在目錄


121    build := -f $(if $(KBUILD_SRC),$(srctree)/)scripts/Makefile.build obj

將scripts_basic 依賴(lài)翻譯后為


scripts_basic:

    make -f $(srctree)/scripts/Makefile.build obj=scripts/basic

表示進(jìn)入Makefile.build文件make,并且obj參數(shù)為scripts/basic。接著打開(kāi)Makefile.build文件分析,它的目標(biāo)為:


005    src := $(obj)


007    PHONY := __build

008    __build:


083    __build: $(if $(KBUILD_BUILTIN),$(builtin-target) $(lib-target) $(extra-y))

084         $(if $(KBUILD_MODULES),$(obj-m))

085         $(subdir-ym) $(always)

086        @:


接著分析src的作用:$(srctree)/scripts/Makefile.build把src (即scripts/basic)目錄下的Makefile包含進(jìn)來(lái)(如果有Kbuild則包含Kbuild)


16    kbuild-dir := $(if $(filter /%,$(src)),$(src),$(srctree)/$(src))//kbuild-dir=scripts/basic

17    include $(if $(wildcard $(kbuild-dir)/Kbuild), $(kbuild-dir)/Kbuild, $(kbuild-dir)/Makefile)//如果存在Kbuild就包含Kbuild,否則保護(hù)Makefile

再回到最終的目標(biāo):規(guī)則的命令是一個(gè)冒號(hào)命令”:”,冒號(hào)(:)命令是bash的內(nèi)建命令,通常把它看作true命令。bash的help解釋?zhuān)╤elp :)為:No effect; the command does nothing. A zero exit code is returned.(沒(méi)有效果,該命令是空操作,退出狀態(tài)總是0)。


__build的依賴(lài)除了$(always),(builtin?target)(lib-target) (extra?y)(subdir-ym)這些變量在$(srctree)/scripts/basic/Makefile中沒(méi)有定義,因此builtin-target、lib-target、extra-y、subdir-ym都為空串,只有always有值。always在scripts/kconfig/Makefile中定義為dochecklxdialog,而dochecklxdialog目標(biāo)所在規(guī)則的注釋寫(xiě)著# Check that we have the required ncurses stuff installed for lxdialog (menuconfig)。也就是說(shuō),build目標(biāo)的依賴(lài)dochecklxdialog是用來(lái)檢查生成配置對(duì)話(huà)框所需的ncurses庫(kù)是不是已經(jīng)安裝在本機(jī)了,如果沒(méi)有安裝,make過(guò)程會(huì)報(bào)錯(cuò)退出。因此在make menuconfig前,我們要保證該庫(kù)已經(jīng)被安裝在本地。


以上文字照抄自配置Linux Kernel時(shí)make menuconfig執(zhí)行流程分析??偨Y(jié)一下也就是說(shuō)scripts_basic 這個(gè)依賴(lài)作用是檢查ncurses庫(kù)是否已經(jīng)安裝在本機(jī)。這個(gè)庫(kù)在生menuconfog界面時(shí)需要用到。


②、outputmakefile 依賴(lài)分析,它同樣是一個(gè)目標(biāo),沒(méi)有依賴(lài)。KBUILD_SRC不空的話(huà)執(zhí)行規(guī)則。KBUILD_SRC為空所以不執(zhí)行


358    outputmakefile:

359    ifneq ($(KBUILD_SRC),)

360        $(Q)$(CONFIG_SHELL) $(srctree)/scripts/mkmakefile

361            $(srctree) $(objtree) $(VERSION) $(PATCHLEVEL)

362    endif

 

③、FORCE依賴(lài)分析,它同樣是一個(gè)目標(biāo)。如下:


1491    PHONY += FORCE

1492    FORCE:

從上面看到,F(xiàn)ORCE 既沒(méi)有依賴(lài)的規(guī)則,其底下也沒(méi)有可執(zhí)行的命令。如果一個(gè)規(guī)則沒(méi)有命令或者依賴(lài),并且它的目標(biāo)不是一個(gè)存在的文件名。在執(zhí)行此規(guī)則時(shí),目標(biāo)總會(huì)被認(rèn)為是最新的。就是說(shuō):這個(gè)規(guī)則一旦被執(zhí)行,make就認(rèn)為它的目標(biāo)已經(jīng)被更新過(guò)。這樣的目標(biāo)在作為一個(gè)規(guī)則的依賴(lài)時(shí),因?yàn)橐蕾?lài)總被認(rèn)為被更新過(guò),因此作為依賴(lài)所在的規(guī)則中定義的命令總會(huì)被執(zhí)行。FORCE所在規(guī)則為空,也是什么都不做。FORCE被定義為一個(gè)偽目標(biāo),所以它作為依賴(lài)時(shí)總是被認(rèn)為是最新的(比目標(biāo)新),故有FORCE作為依賴(lài)的目標(biāo)每次make時(shí)必然會(huì)重新生成,在這里FORCE偽目標(biāo)的規(guī)則命令為空,故FORCE在Kbuild體系中,就是相當(dāng)于是一個(gè)關(guān)鍵字,如果我們想要某個(gè)目標(biāo)每次make的時(shí)候都一定會(huì)被重新生成,就把FORCE寫(xiě)為該目標(biāo)的依賴(lài)。


以上文字照抄自配置Linux Kernel時(shí)make menuconfig執(zhí)行流程分析。



④、接著分析第一條規(guī)則$(Q)mkdir -p include/linux include/config,它表示創(chuàng)建include/linux include/config兩個(gè)文件夾


⑤、最后分析第二條規(guī)則$(Q)$(MAKE) $(build)=scripts/kconfig $@,將它展開(kāi)得到:


make -f $(srctree)/scripts/Makefile.build obj=scripts/kconfig smdk2410_defconfig

上面這句規(guī)則的意思是調(diào)用Makefile.build文件,最終的目標(biāo)為s3c2410_defconfig,由上面第①條分析可知,Makefile.build文件包含了scripts/kconfig/Makefile,而s3c2410_defconfig正是定義在這個(gè)文件中:


66    %_defconfig: $(obj)/conf

67        $(Q)$< -D arch/$(ARCH)/configs/$@ arch/$(ARCH)/Kconfig

展開(kāi)得:


66    s3c2410_defconfig: scripts/kconfig/conf

67        scripts/kconfig/conf -D arch/arm/configs/s3c2410_defconfig arch/arm/Kconfig

它的意思是先是生成conf程序,然后利用conf程序解析 s3c2410_defconfig文件與Kconfig文件配置單板,最后生成 .config文件,供make uImage時(shí)調(diào)用


1、make menuconfig分析,這個(gè)目標(biāo)與s3c2410_defconfig目標(biāo)一致,都是%config,所以只是分析最后階段,調(diào)用Makefile.build文件,包含了scripts/kconfig/Makefile,而menuconfig正是定義在這個(gè)文件中:


13    menuconfig: $(obj)/mconf

14        $< arch/$(ARCH)/Kconfig

故menuconfig目標(biāo)的規(guī)則的命令為scripts/kconfig/mconf  arch/arm/Kconfig。mconf在這里實(shí)際上是scripts/kconfig目錄下的一個(gè)可執(zhí)行文件,此條命令里arch/arm/Kconfig字符串作為命令行參數(shù)傳入該可執(zhí)行文件運(yùn)行,該可執(zhí)行文件如果存在.config的內(nèi)容,則依據(jù).config的內(nèi)容文件,生成配置界面;否則依據(jù)arch/arm/Kconfig文件提供的菜單配置,生成配置界面。


NOTE: 這里為什么說(shuō)scripts/kconfig/mconf就是一個(gè)可執(zhí)行文件呢?繼續(xù)往下看scripts/kconfig/Makefile中的內(nèi)容:


lxdialog := lxdialog/checklist.o lxdialog/util.o lxdialog/inputbox.o

lxdialog += lxdialog/textbox.o lxdialog/yesno.o lxdialog/menubox.o


conf-objs    := conf.o  zconf.tab.o

mconf-objs    := mconf.o zconf.tab.o $(lxdialog)

kxgettext-objs    := kxgettext.o zconf.tab.o


hostprogs-y := conf qconf gconf kxgettext


ifeq ($(MAKECMDGOALS),menuconfig)

    hostprogs-y += mconf

endif


ifeq ($(MAKECMDGOALS),xconfig)

    qconf-target := 1

endif

ifeq ($(MAKECMDGOALS),gconfig)

    gconf-target := 1

endif



ifeq ($(qconf-target),1)

qconf-cxxobjs    := qconf.o

qconf-objs    := kconfig_load.o zconf.tab.o

endif


如果在編譯內(nèi)核的過(guò)程中,需要現(xiàn)編譯出一些可執(zhí)行文件供內(nèi)核編譯階段使用,就需要借助Kbuild框架的本機(jī)程序支持的特性。Kbuild 框架中,專(zhuān)門(mén)使用hostprogs-y變量來(lái)指示在內(nèi)核編譯階段需要使用的一些可執(zhí)行文件,通過(guò)hostprogs-y += mconf,就向make程序指明mconf是一個(gè)編譯階段需要使用的可執(zhí)行文件。另外,Kbuild框架使用-objs后綴來(lái)指明相應(yīng)的可執(zhí)行文件需要通過(guò)多個(gè)目標(biāo)文件來(lái)鏈接生成,mconf-objs    := mconf.o zconf.tab.o $(lxdialog)就是向make指明,mconf文件是由mconf.o zconf.tab.o lxdialog/checklist.o lxdialog/util.o lxdialog/inputbox.o lxdialog/textbox.o lxdialog/yesno.o lxdialog/menubox.o鏈接生成的。再有,未明確寫(xiě)明生成規(guī)則時(shí),Kbuild框架默認(rèn).o文件是由同名.c或.S文件編譯生成的。


保存配置信息后會(huì)在內(nèi)核根目錄下生成一個(gè).config文件,該文件保存了所做的內(nèi)核配置信息。


關(guān)鍵字:Linux  移植  配置過(guò)程 引用地址:Linux移植之配置過(guò)程分析

上一篇:Linux移植之make uImage編譯過(guò)程分析
下一篇:Linux移植之移植步驟

推薦閱讀最新更新時(shí)間:2025-06-15 19:55

linux-2.6.32在mini2440開(kāi)發(fā)板上移植 添加觸摸屏驅(qū)動(dòng)程序
在內(nèi)核中添加觸摸屏驅(qū)動(dòng)程序 編者:linux2.6.32并沒(méi)有帶S3C2440觸摸屏驅(qū)動(dòng)程序,需要自己實(shí)現(xiàn)。而在此的觸摸屏驅(qū)動(dòng)程序時(shí)作為一個(gè)輸入設(shè)備來(lái)實(shí)現(xiàn)的。在linux中,對(duì)于輸入設(shè)備而言,內(nèi)核專(zhuān)為其設(shè)計(jì)了輸入子系統(tǒng),由核心層處理公共的工作。因?yàn)閷?duì)于輸入設(shè)備而言,只是中斷、讀鍵值/坐標(biāo)值是與設(shè)備相關(guān)的,其余的如輸入事件的緩沖區(qū)的管理以及字符設(shè)備驅(qū)動(dòng)的file_operations接口則是輸入設(shè)備通用的。所以在此是在輸入子系統(tǒng)的框架下進(jìn)行編寫(xiě)觸摸屏驅(qū)動(dòng)程序。對(duì)于這個(gè)驅(qū)動(dòng)的移植以及講解,參考了網(wǎng)上的一些文章,一部分摒棄了手冊(cè)。 1 在內(nèi)核中添加觸摸屏驅(qū)動(dòng)程序 Linux-2.6.32.2 內(nèi)核也沒(méi)有包含支持S3C2440 的觸摸屏
[單片機(jī)]
linux內(nèi)核移植之一 linux-4.1.4的zImage生成(Makefile分析)
一 編譯過(guò)程 仍然以2410的編譯說(shuō)明,執(zhí)行如下步驟 (1)主Makefile修改變量如下 ARCH := arm CROSS_COMPILE := arm-linux- (2)make s3c2410_defconfig (3)make zImage 最終生成用于uboot啟動(dòng)的內(nèi)核應(yīng)該是uImage,uImage是zImage通過(guò)uboot的mkimage工具加上一個(gè)文件頭生成的,這里只分析到zImage。 二 make s3c2410_defconfig分析 主Makefile下有如下定義: %config: scripts_basic outputmakefile FORCE $(Q)$(MAKE) $(build
[單片機(jī)]
FreeRTOS學(xué)習(xí)筆記(1)——移植源碼到STM32F103
一、簡(jiǎn)介 FreeRTOS 是一個(gè)可裁剪、可剝奪型的多任務(wù)內(nèi)核,而且沒(méi)有任務(wù)數(shù)限制。FreeRTOS 提供了實(shí)時(shí)操作系統(tǒng)所需的所有功能,包括資源管理、同步、任務(wù)通信等。 FreeRTOS 是用 C 和匯編來(lái)寫(xiě)的,其中絕大部分都是用 C 語(yǔ)言編寫(xiě)的,只有極少數(shù)的與處理器密切相關(guān)的部分代碼才是用匯編寫(xiě)的,F(xiàn)reeRTOS 結(jié)構(gòu)簡(jiǎn)潔,可讀性很強(qiáng)!最主要的是非常適合初次接觸嵌入式實(shí)時(shí)操作系統(tǒng)學(xué)生、嵌入式系統(tǒng)開(kāi)發(fā)人員和愛(ài)好者學(xué)習(xí)。 最新版本 V9.0.0(2016年),盡管現(xiàn)在 FreeRTOS 的版本已經(jīng)更新到 V10.4.1 了,但是我們還是選擇 V9.0.0,因?yàn)閮?nèi)核很穩(wěn)定,并且網(wǎng)上資料很多,因?yàn)?V10.0.0 版本之后是亞馬遜收
[單片機(jī)]
S3C4510上嵌入式Web服務(wù)器-boa在uclinux下的的移植
uClinux下,主要有三個(gè)Web Server:httpd、thttpd和Boa。Httpd是最簡(jiǎn)單的一個(gè)Web Server,它的功能最弱,不支持認(rèn)證,不支持CGI。Thttpd和Boa都支持認(rèn)證、CGI等,功能都比較全。為了實(shí)現(xiàn)動(dòng)態(tài)Web技術(shù),這里我們選擇實(shí)現(xiàn)一個(gè)支持CGI的、非常適合于嵌入式系統(tǒng)的Boa Web Server。 Boa是一個(gè)單任務(wù)的http服務(wù)器,源代碼開(kāi)放、性能高。目前,uClinux的代碼中已經(jīng)包含boa的源代碼,在uClinux下實(shí)現(xiàn) Boa,需要對(duì)Boa做一些配置和修改。這主要通過(guò)對(duì)boa.conf和mime.types文件進(jìn)行修改來(lái)實(shí)現(xiàn),需要改動(dòng)的配置有以下幾項(xiàng)。 (1)建目錄 由于uClinux
[單片機(jī)]
uboot在s3c2440上的移植(6)
一、移植環(huán)境 主 機(jī):VMWare--Fedora 9 開(kāi)發(fā)板:Mini2440--64MB Nand,Kernel:2.6.30.4 編譯器:arm-linux-gcc-4.3.2.tgz u-boot:u-boot-2009.08.tar.bz2 二、移植步驟 10)u-boot利用tftp服務(wù)下載內(nèi)核和利用nfs服務(wù)掛載nfs文件系統(tǒng)。 知識(shí)點(diǎn): tftp服務(wù)的安裝與配置及測(cè)試; nfs服務(wù)的安裝與配置及測(cè)試; u-boot到kernel的參數(shù)傳遞(重點(diǎn))。 我們知道使用tftp下載內(nèi)核和使用nfs掛載文件系統(tǒng)的好處是,當(dāng)我們重新編譯內(nèi)核或文件系統(tǒng)后不用重新把這些鏡像文件再燒錄到flash上,而是把
[單片機(jī)]
uboot在s3c2440上的<font color='red'>移植</font>(6)
mini2440 移植 Java虛擬機(jī)的錯(cuò)誤處理
大都數(shù)朋友都會(huì)以下面這篇文摘《移植Java虛擬機(jī)到mini2440》http://www.linuxidc.com/Linux/2011-08/41912.htm 作為參考,不過(guò)里面有幾個(gè)錯(cuò)誤: 首先,在 “ 修改 segvhandler_arch.c 文件 gedit ../../src/linux-arm/javavm/runtime/segvhandler_arch.c 修改 #define ucontext asm_ucontext #include 為 //#define ucontext asm_ucontext //注釋掉這句 #include //去掉arm/ ”
[單片機(jī)]
RTThread完整版學(xué)習(xí)之操作系統(tǒng)移植
RTThread的一大特色就是有豐富免費(fèi)的組件可以用,但是對(duì)于我這個(gè)初學(xué)者來(lái)說(shuō)很難習(xí)慣它必須使用它的模板完成任務(wù),而且在stm32也已經(jīng)放棄了對(duì)標(biāo)準(zhǔn)庫(kù)的支持,這讓我這個(gè)一直使用標(biāo)準(zhǔn)庫(kù)的菜鳥(niǎo)感到很是頭大。但初學(xué),還就得依葫蘆畫(huà)瓢,待練習(xí)的成熟了,再自己開(kāi)發(fā)。本筆記參考參考的教程為bsp制作 第一步:是復(fù)制工程模板這 如果感覺(jué)這個(gè)比較慢可以 將這里面的倉(cāng)庫(kù)導(dǎo)入到gitee中,這樣就很快了。復(fù)制的時(shí)候是要將整個(gè)工程都復(fù)制的。如圖所示 標(biāo)紅框框的這幾個(gè)是比較重要的,主要修改的文件夾是bsp文件夾,在bsp(板級(jí)支持包)中RT-Thread已經(jīng)給我么做了好多的例程,但是有時(shí)候需要自己建立一個(gè)屬于自己的板級(jí)支持包,所以過(guò)程還是要掌握的。我
[單片機(jī)]
RTThread完整版學(xué)習(xí)之操作系統(tǒng)<font color='red'>移植</font>
如何利用官方移植例子,創(chuàng)建一個(gè)自己demo工程
之前挖了圖解 freeRTOS 的坑,挖了坑就得填。今天就從使用開(kāi)始,先把freeRTOS用起來(lái)。先聊一聊在 STM32 F407上的如何電燈,如果只用freeRTOS點(diǎn)燈,無(wú)疑有點(diǎn)殺雞用牛刀的感覺(jué)。但是想用freeRTOS做 產(chǎn)品 ,先照類(lèi)似步驟則可以驗(yàn)證最小系統(tǒng),驗(yàn)證freeRTOS是否能正確跑起來(lái),再在此基礎(chǔ)上開(kāi)始做應(yīng)用開(kāi)發(fā),就把任務(wù)分解了。本文主要梳理一下如何利用官方移植例子,創(chuàng)建一個(gè)自己demo工程,對(duì)于沒(méi)用過(guò)的有點(diǎn)參考價(jià)值。 注:本文基于IAR f or ARM 8.22.1(個(gè)人喜歡IAR), 硬件 采用正點(diǎn)原子的STM32F407探索者開(kāi)發(fā)板,STLink V2。 準(zhǔn)備工作 去官網(wǎng)https://www.
[單片機(jī)]
如何利用官方<font color='red'>移植</font>例子,創(chuàng)建一個(gè)自己demo工程
小廣播
設(shè)計(jì)資源 培訓(xùn) 開(kāi)發(fā)板 精華推薦

最新單片機(jī)文章

 
EEWorld訂閱號(hào)

 
EEWorld服務(wù)號(hào)

 
汽車(chē)開(kāi)發(fā)圈

 
機(jī)器人開(kāi)發(fā)圈

電子工程世界版權(quán)所有 京ICP證060456號(hào) 京ICP備10001474號(hào)-1 電信業(yè)務(wù)審批[2006]字第258號(hào)函 京公網(wǎng)安備 11010802033920號(hào) Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved