嵌入式系統(tǒng)原理與應(yīng)用-基于Cortex-A53微處理器 課件 第7章 Linux系統(tǒng)移植_第1頁
嵌入式系統(tǒng)原理與應(yīng)用-基于Cortex-A53微處理器 課件 第7章 Linux系統(tǒng)移植_第2頁
嵌入式系統(tǒng)原理與應(yīng)用-基于Cortex-A53微處理器 課件 第7章 Linux系統(tǒng)移植_第3頁
嵌入式系統(tǒng)原理與應(yīng)用-基于Cortex-A53微處理器 課件 第7章 Linux系統(tǒng)移植_第4頁
嵌入式系統(tǒng)原理與應(yīng)用-基于Cortex-A53微處理器 課件 第7章 Linux系統(tǒng)移植_第5頁
已閱讀5頁,還剩55頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

嵌入式系統(tǒng)原理與應(yīng)用電子與電氣工程學(xué)院第七章Linux系統(tǒng)移植教師:程蔚正大氣象厚德載物MinnanUniversityofScienceandTechnology目錄CONTENTS01.U-Boot編譯與移植02.Linux編譯與移植03.Linux文件系統(tǒng)制作正大氣象厚德載物MinnanUniversityofScienceandTechnology01PARTONE嵌入式系統(tǒng)簡介正大氣象厚德載物MinnanUniversityofScienceandTechnology正大氣象厚德載物MinnanUniversityofScienceandTechnology一、BootLoader介紹二、S5p6818啟動方式三、Uboot移植四、Uboot命令U-Boot編譯與移植

S5p6818啟動正大氣象厚德載物MinnanUniversityofScienceandTechnology一、BootLoader介紹BootLoader系統(tǒng)啟動引導(dǎo)程序,主要作用:搬移內(nèi)核(系統(tǒng))到內(nèi)存中執(zhí)行。分類標(biāo)準(zhǔn)說明針對不同CPU架構(gòu)1、針對X86架構(gòu)的有LIL0、GRUB、ntldr等針對不同2、針對ARM架構(gòu)的有vivi、armboot等CPU架構(gòu)3、針對PPC架構(gòu)的有ppcboot等4、可以支持多種架構(gòu)的u-boot等針對不同操作系統(tǒng)1、專門用來啟動Linux系統(tǒng)的vivi2、專門用來啟動WinCE系統(tǒng)的eboot3、基于eCos系統(tǒng)的引導(dǎo)程序redboot4、可以啟動多種操作系統(tǒng)的u-boot等正大氣象厚德載物MinnanUniversityofScienceandTechnology一、BootLoader介紹BootLoader簡單對比BooloaderMonitor描述X86ARMLILO否Linux磁盤引導(dǎo)程序是否GRUB否GNU的LILO替代程序是否ntldr否x86上引導(dǎo)windowsNT系列是否armboot是專門為arm架構(gòu)設(shè)計(jì)的boot否是ppcboot是引導(dǎo)ppc架構(gòu)操作系統(tǒng)否是vivi是韓國Mizi公司針對三星ARM架構(gòu)CPU設(shè)計(jì)引導(dǎo)程序否是redboot是基于eCos的引導(dǎo)程序是是u-boot是通用引導(dǎo)程序,支持多種CPU架構(gòu)、多種操作系統(tǒng)是是正大氣象厚德載物MinnanUniversityofScienceandTechnologyS5P6818systemboot的兩種方式(芯片手冊第3章systemBootP93):1、外部靜態(tài)內(nèi)存啟動:2、內(nèi)部ROM啟動:NANDbootSD/MMC/SDFSbootSPISerialEEPROMbootUARTbootUSBboot二、S5p6818啟動方式二、S5p6818啟動方式--- 確定啟動方式為:SDHC啟動BootMCU_SD0:1MCU_SD1:0MCU_SD2:1采用的是SD/MMC啟動方式SD/MMC接口有3個(gè)通道,SD0卡槽、SD1卡槽和EMMC。默認(rèn)是從SD0卡槽的中SD卡啟動,如果SD0卡槽沒有SD卡,是從EMMC啟動。MCU_SD3:0,選用的是CH1二、S5p6818啟動方式--- SDHC啟動方式介紹iROM(0x34000000)20KBiRAM(0xffff0000)64KB1、上電執(zhí)行固化在iROM中的指令,此代碼出廠就有,主要功能初始化SD,識別SD接口等;2、從SD/MMC/eMMC拷貝用戶的啟動代碼(約56KB)到iRAM;3、跳轉(zhuǎn)到iRAM地址中,執(zhí)行用戶的啟動代碼;注:用戶啟動代碼約等于56Kb。二、S5p6818啟動過程S5P6818啟動過程BL0階段:芯片選擇啟動iROM、iROM選擇啟動下一階段引導(dǎo)程序所在設(shè)備(P95圖iROM啟動Uboot第一階段BL1Uboot第一階段啟動Uboot第二階段BL2Uboot第二階段啟動內(nèi)核綜上所述,我們的userbootcode是從SD卡等外部設(shè)備上加載的,這樣iROM就會先找到能夠啟動的外部設(shè)備SD卡,并從核心板上的EMMC上搬運(yùn)userbootcode,而搬運(yùn)的這段代碼就是我們常說的Bootloader。ubootpak.bin主要就是一個(gè)包含了2ndboot和uboot.bin的完整Bootloader。二、S5p6818啟動過程二、S5p6818啟動過程二、S5p6818啟動過程二、S5p6818啟動過程三、Uboot移植---簡介1、簡介:Uboot最初是由PPCBoot發(fā)展而來,目前已成為Armboot和PPCboot的替代品2、特點(diǎn):

支持操作系統(tǒng)有Linux、NetBSD、VxWorks、QNX、RTEMS、ARTOS、LynxOS等。

支持的處理器架構(gòu)有PowerPC、MIPS、X86、ARM、NIOS、Xscale3、Uboot最新版本:http://git.denx.de/?p=u-boot.git;a=summary三、Uboot移植---源碼目錄三、Uboot移植---源碼目錄三、Uboot移植---源碼目錄三、Uboot移植---編譯配置u-boot的配置編譯需要經(jīng)過以下步驟:①在u-boot的根目錄下執(zhí)行:#makeGEC6818_config//對應(yīng)開發(fā)板配置Makefile會構(gòu)建編譯結(jié)構(gòu),如:架構(gòu)、cpu、開發(fā)板、廠商、芯片、目錄等,為下一步真正編譯鏈接做準(zhǔn)備。②修改include/configs/x6818.h配置文件③在u-boot根目錄下執(zhí)行:makeARM=ARCHCROSS_COMPILE=../prebuilts/gcc/linux-x86/arm/arm-eabi-4.8/bin/arm-eabi-其中ARM=ARCHCROSS_COMPILE=../prebuilts/gcc/linux-x86/arm/arm-eabi-4.8/bin/arm-eabi-,可以根據(jù)實(shí)際情況指定編譯器路徑,或可將本部分添加到頂層Makefile文件中,則輸入編譯命令可只輸入:make。(注:選擇的編譯器需支持編譯U-boot)三、Uboot移植---編譯結(jié)果如下:GECuboot.bin三、Uboot移植---編譯配置連接文件u-boot.ldsmake命令執(zhí)行的是Makefile文件的第一個(gè)目標(biāo)即->

->

->

->

->三、Uboot移植---編譯配置連接文件u-boot.ldsnsih.txt和2ndboot是廠商提供的,二進(jìn)制文件。將u-boot.bin、nsih.txt和2ndboot使用tools/mk6818工具生成ubootpak.bin根據(jù)以上步驟產(chǎn)生編譯和鏈接所需文件的信息,最終make完成,在根目錄下將生成:ubootpak.binu-boot.binu-boot.map三個(gè)文件。三、Uboot移植---編譯配置1、Uboot源碼中README:2、確定配置方法為:makeGEC6818_config3、在終端輸入:makehelp4、打開Makefile文件,查找_config5、打開Uboot根目錄中的mkconfig,

是一個(gè)shell腳本進(jìn)行配置。三、Uboot移植---編譯過程1、打開mkconfigUboot源碼提供了配置腳本,完成CPU架構(gòu)和平臺信息選擇配置:從boards.cfg文件中匹配到當(dāng)前平臺信息,將該信息重定向到/include/config.h中。信息如下:四、Uboot命令常用命令1、print得到所有命令列表2、help:helptest,列出test功能的使用說明3、ping:測試與其他設(shè)備網(wǎng)絡(luò)是否連通4、setenv:設(shè)置環(huán)境變量,例:setenvserverip5、saveenv:設(shè)置好環(huán)境變量以后,保存變量值6、tftp:tftp32000000vmlinux,把server(IP=環(huán)境變量中設(shè)置的serverip)中/tftpdroot/下的vmlinux通過TFTP讀入到物理內(nèi)存32000000處。7、bootm:起動UBOOTTOOLS制作的壓縮LINUX內(nèi)核,bootm32000008、md:修改RAM中的內(nèi)容,md32000000(內(nèi)存的起始地址)四、Uboot命令---U-Boot命令制作內(nèi)核的啟動,通過U-Boot命令來實(shí)現(xiàn)的。U-Boot中每個(gè)命令都通過U_BOOT_CMD宏來定義,格式如下:U_BOOT_CMD(_name,_maxargs,_rep,_cmd,_usage,_help)各項(xiàng)參數(shù)的意義如下:

_name:命令的名字,它不是一個(gè)字符串。

_maxargs:最大的參數(shù)。

_rep:命令是否可重復(fù),可重復(fù)是指運(yùn)行一個(gè)命令后,下次敲回即可再次運(yùn)行。

_cmd:對應(yīng)的函數(shù)指針,類型為(*cmd)(structcmd_tbl_s*,int,int,char*[])。

_usage:簡單的使用說明,這是個(gè)字符串。

_help:較詳細(xì)的使用說明,這是個(gè)字符串。四、Uboot命令---U-Boot命令制作例:在U-boot中增加一條test命令,命令至少支持接收3個(gè)參數(shù)。并且根據(jù)輸入?yún)?shù)做求和,打印求和的值。1)進(jìn)入common目錄下新增一個(gè)cmd_test.c文件,并且復(fù)制一份模板。2)打開cmd_test.c按要求修改。制作命令代碼框架如下:#include<common.h>#include<command.h>

staticintdo_help(cmd_tbl_t*cmdtp,intflag,intargc,char*constargv[]){……}

U_BOOT_CMD(……);四、Uboot命令---U-Boot命令制作例:在U-boot中增加一條test命令,命令至少支持接收3個(gè)參數(shù)。并且根據(jù)輸入?yún)?shù)做求和,打印求和的值。3)修改后如下:4)保存,并修改本級Makefile文件,添加編譯語句。ifndefCONFIG_SPL_BUILDobj-y+=main.oobj-y+=command.oobj-y+=exports.oobj-y+=hash.oobj-y+=cmd_test.o5)編譯與下載了解awk工具02PARTTWOLinux內(nèi)核編譯與移植正大氣象厚德載物MinnanUniversityofScienceandTechnology一、Linux內(nèi)核版本及獲得二、Linux內(nèi)核結(jié)構(gòu)三、Linux內(nèi)核啟動引導(dǎo)過程四、Linux內(nèi)核的配置和編譯五、Linux3.4.39內(nèi)核移植Linux內(nèi)核編譯與移植-S5P6818一、Linux內(nèi)核版本變遷及獲得BootLoader系統(tǒng)啟動引導(dǎo)程序,主要作用:搬移內(nèi)核(系統(tǒng))到內(nèi)存中執(zhí)行。一、Linux內(nèi)核版本變遷及其獲得登錄Linux內(nèi)核的官方網(wǎng)站/,可以看到如圖Linux內(nèi)核的版本號可以從源代碼的頂層目錄下的Makefile中看到,比如下面幾行它們構(gòu)成了Linux的版本號:3.4.39。VERSION=3PATCHLEVEL=6SUBLEVEL=39二、Linux內(nèi)核結(jié)構(gòu)內(nèi)核源碼結(jié)構(gòu)下載源碼后解壓進(jìn)入源碼頂層目錄如下圖,其中首先要分析的三個(gè)重要文件為:Makefile、Kconfig、.config。.config為隱藏文件需輸入ls-a可查看,是編譯后自動生成文件保存相關(guān)配置項(xiàng),Kconfig是生成配置菜單的重要文件。1、Makefile1)打開頂層Makefile:init-y、drivers-y、net-y、libs-y和core-y。2)arch/$(ARCH)/Makefile,以ARM體系為例,在arch/arm/Makefile中出現(xiàn)了另一類:head-y對于沒有MMU的處理器,MMUEXT的值位-nommu,使用文件head-nommu.S;對于有MMU的處理器,MMUEXT的值為空,使用文案head.S。3)在配置內(nèi)核時(shí)生成配置文件.config三、Linux內(nèi)核啟動引導(dǎo)過程1、Makefile3)在配置內(nèi)核時(shí)生成配置文件.config頂層Makefile使用如下語句間接包含.config文件,以后就根據(jù).config中定義的各個(gè)選項(xiàng)決定編譯那些文件。三、Linux內(nèi)核啟動引導(dǎo)過程vmlinux-all表示所有構(gòu)成內(nèi)核映像文件vmlinux的文件。從vmlinux-init開始可知這些目標(biāo)文件的順序?yàn)椋篽ead-y、init-y、core-y、libs-y、drivers-y、net-y,即arch/arm/head.o(假設(shè)沒有MMU,否則為head-nommu.o)、arch/arm/kernel/init_task.o、init/built-in.o、usr/built-in.o等。1、Makefile3)在配置內(nèi)核時(shí)生成配置文件.config其中vmlinux-lds表示連接腳本為arch/$(SRCARCH)/kernel/vmlinux.lds。對于ARM體系,連接腳本就是arch/arm/kernel/vmlinux.lds,它由arch/arm/kernel/vmlinux.lds.S文件生成,規(guī)則在scripts/Makefile.build中三、Linux內(nèi)核啟動引導(dǎo)過程生成的arch/arm/kernel/vmlinux.lds頂層Makefile和arch/$(ARCH)/Makefile決定根目錄下哪些子目錄、arch/$(ARCH)/目錄下那些文件和目錄被編進(jìn)內(nèi)核。各級子目錄下的Makefile決定所在目錄下哪些文件被編進(jìn)內(nèi)核,哪些文件被編成模塊(即驅(qū)動程序)等。最后頂層Makefile按照一定的順序組織文件,根據(jù)連接腳本arch/$(ARCH)/kernel/vmlinux.lds生成內(nèi)核映像文件vmlinux。2Kconfig分析內(nèi)核目錄下執(zhí)行“makemenuconfig”三、Linux內(nèi)核啟動引導(dǎo)過程生成的arch/arm/kernel/vmlinux.lds內(nèi)核源碼的每個(gè)子目錄中,都有一個(gè)Kconfig文件。Kconfig用于配置內(nèi)核,是各種配置界面的源文件。1內(nèi)核編譯(1)修改頂層Makefie。CROSS_COMPILE變量賦值的路徑為編譯內(nèi)核編譯器所在路徑。請區(qū)分編譯內(nèi)核與編譯應(yīng)用程序所使用的編譯器不是同一個(gè)編譯器。(2)查看與修改平臺的支持文件。根據(jù)自己設(shè)備體系結(jié)構(gòu)選擇相應(yīng)的選項(xiàng)。粵嵌GEC6818實(shí)驗(yàn)平臺選擇信息為:makemenuconfig--->SystemType--->ARMsystemtype(SLsiAPS5P6818)--->(X)SLsiAPS5P6818,四、Linux內(nèi)核的配置和編譯1內(nèi)核編譯(2)查看與修改平臺的支持文件。根據(jù)自己設(shè)備體系結(jié)構(gòu)選擇相應(yīng)的選項(xiàng)?;浨禛EC6818實(shí)驗(yàn)平臺選擇信息為:makemenuconfig--->SystemType--->ARMsystemtype(SLsiAPS5P6818)--->(X)SLsiAPS5P6818,四、Linux內(nèi)核的配置和編譯1內(nèi)核編譯(3)輸入命令make編譯,再輸入命令:makeuImage生成U-boot引導(dǎo)啟動的uImage文件。四、Linux內(nèi)核的配置和編譯說明:輸入makeuImage

如果報(bào)錯,請檢查mkimage文件是否放到/bin下。如沒有請進(jìn)入前期章節(jié)編譯過的bootloader源碼目錄的tools中mkimage復(fù)制到/bin。命令為:sudocp../GEC6818uboot/tools/mkimage/bin1內(nèi)核編譯vmlinux:Linux內(nèi)核編譯出來的原始的內(nèi)核文件,elf格式,未做壓縮處理。該映像可用于定位內(nèi)核問題,但不能直接引導(dǎo)Linux系統(tǒng)啟動。Image:Linux內(nèi)核編譯時(shí),使用objcopy處理vmlinux后生成的二進(jìn)制內(nèi)核映像。該映像未壓縮,可直接引導(dǎo)Linux系統(tǒng)啟動。

zImage:使用gzip壓縮Image后,使用objcopy命令生成的Linux內(nèi)核映像。該映像一般作為uboot的引導(dǎo)映像文件。

uImage:在zImage前面增加一個(gè)64字節(jié)的頭,描述映像文件類型,加載位置,大小等信息。該映像是老版本uboot專用的引導(dǎo)映像。四、Linux內(nèi)核的配置和編譯03PARTTHERELinux文件系統(tǒng)制作正大氣象厚德載物MinnanUniversityofScienceandTechnology一、Linux文件系統(tǒng)概念二、Linux制作根文件系統(tǒng)根文件系統(tǒng)制作-S5P6818一、Linux文件系統(tǒng)概念Linux支持多種文件系統(tǒng),包括ext3、ext4、vfat、ntfs、iso9660、jffs、romfs和nfs等,為了對各類文件系統(tǒng)進(jìn)行統(tǒng)一管理,Linux引入了虛擬文件系統(tǒng)VFS(VirtualFileSystem),為各類文件系統(tǒng)提供一個(gè)統(tǒng)一的操作界面和應(yīng)用編程接口。Linux啟動時(shí),第一個(gè)必須掛載的是根文件系統(tǒng);若系統(tǒng)不能從指定設(shè)備上掛載根文件系統(tǒng),則系統(tǒng)會出錯而退出啟動。二、制作根文件系統(tǒng)系統(tǒng)啟動時(shí)基本功能。1、init進(jìn)程的應(yīng)用程序掛在根文件系統(tǒng)上。2、根文件系統(tǒng)提供了根目錄/。3、內(nèi)核啟動后的應(yīng)用層配置(etc目錄)在根文件系統(tǒng)上。(可以認(rèn)為,發(fā)行版=內(nèi)核+rootfs)。4、Shell命令程序在根文件系統(tǒng)上(ls、cd等)。最小根文件系統(tǒng)一般至少包含:bin、sbin、dev、lib、etc、mnt等目錄及其中的關(guān)鍵文件。二、制作根文件系統(tǒng)busybox是一個(gè)集成了一百多個(gè)最常用linux命令和工具的軟件,是一個(gè)開源項(xiàng)目,遵循GPLv2協(xié)議。Busybox將眾多的UNIX命令集合進(jìn)一個(gè)很小的可執(zhí)行程序中,可以用來替代GNUfileutils、shellutils等工具集。Busybox中各種命令與相應(yīng)的GNU工具相比,所能提供的選項(xiàng)比較少,但是功能基本足夠,俗稱嵌入式系統(tǒng)中的“瑞士軍刀”。二、制作根文件系統(tǒng)1文件系統(tǒng)配置(1)獲取busybox工具:/downloads/,本章以busybox-1.26.2為例進(jìn)行配置。新建一個(gè)文件夾,復(fù)制busybox壓縮包到改文件夾下,并解壓busybox-1.26.2.tar.bz2,進(jìn)入解壓縮后的目錄,并清除預(yù)配置。二、制作根文件系統(tǒng)1文件系統(tǒng)配置(2)輸入makemenuconfig進(jìn)入busybox配置界面如圖7.23所示,菜單各項(xiàng)表示編譯后所能支持的工具或命令。例如“Editors--->”菜單進(jìn)入后可以見“[*]vi(NEW)”表示busybox編譯后支持vi編輯器。其他選項(xiàng)請根據(jù)實(shí)際情況或者興趣自行了解,本節(jié)案例全部選擇默認(rèn)配置。二、制作根文件系統(tǒng)1文件系統(tǒng)配置編譯后,文件保存位置在(./_install)BusyBoxinstallationprefix,如圖7.25所示,此處可以默認(rèn),配置完成,退出時(shí)保存。二、制作根文件系統(tǒng)1文件系統(tǒng)配置(3)編譯。打開頂層Makefile,修改編譯器變量值。編譯器路徑請根據(jù)自己系統(tǒng)實(shí)際情況指定:ARCH?=arm,CROSS_COMPILE?=/usr/local/arm/5.4.0/usr/bin/arm-linux-。然后輸入make將編譯好的文件全部復(fù)制到指定目錄(此處為默認(rèn)目錄),輸入makeinstall,復(fù)制成功結(jié)果。makeinstall后查看對應(yīng)目錄,了解目錄結(jié)構(gòu),例如_install、_install/bin、linuxrc。linuxrc文件是鏈接腳本bin/busybox文件。二、制作根文件系統(tǒng)1文件系統(tǒng)配置查看busybox最終得到的文件,頂層目錄下的_install,進(jìn)入該目錄,可見已生成bin、sbin、linuxrc并且其中已存在相關(guān)內(nèi)容,至此最小根文件系統(tǒng)bin、sbin已制作完成,后續(xù)將在_install目錄下完最小系統(tǒng)所需的其他目錄與內(nèi)容。cw@dell:~/rootfs/busybox-1.26.2$ls_install/cw@dell:~/rootfs/busybox-1.26.2$ls_install/bin/cw@dell:~/rootfs/busybox-1.26.2$cd_install/cw@dell:~/rootfs/busybox-1.26.2/_install$lslinuxrc-lcw@dell:~/rootfs/busybox-1.26.2/_install$filebin/busybox二、制作根文件系統(tǒng)1文件系統(tǒng)配置(4)復(fù)制lib內(nèi)容。在_install目新建lib,找到交叉編譯器所在路徑下的lib目錄,按依賴關(guān)系復(fù)制其中所有文件到新建的lib中。(

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論