国产成人精品三级麻豆,色综合天天综合高清网,亚洲精品夜夜夜,国产成人综合在线女婷五月99播放,色婷婷色综合激情国产日韩

當(dāng)前位置:首頁 > 嵌入式培訓(xùn) > 嵌入式學(xué)習(xí) > 學(xué)習(xí)筆記 > 系統(tǒng)移植詳細步驟,學(xué)霸總結(jié)

系統(tǒng)移植詳細步驟,學(xué)霸總結(jié) 時間:2018-08-24      來源:未知

系統(tǒng)移植

一.服務(wù)器的搭建

1. TFTP服務(wù)器

1.1 安裝

#sudo apt-get install tftpd-hpa tftp-hpa

1.2配置服務(wù)器客戶端在同一網(wǎng)段

服務(wù)器 (Ubuntu)$ sudo ifconfig eth0(網(wǎng)卡) 192.168.~.~ netmask 255.255.255.0

上面的命令,將ip地址和子網(wǎng)掩碼設(shè)置到內(nèi)核;

當(dāng)網(wǎng)卡斷開時,內(nèi)核會丟掉ip地址;

當(dāng)網(wǎng)卡連接時,內(nèi)核會從配置文件(從網(wǎng)絡(luò)自動獲取)讀取ip地址和子網(wǎng)掩碼

客戶端 (開發(fā)板)# setenv ipaddr 192.168.~.~ 將ip地址設(shè)置到ipaddr環(huán)境變量

# setenv netmask 255.255.255.0 設(shè)置子網(wǎng)掩碼

# saveenv 保存所有的環(huán)境變量到emmc

網(wǎng)卡:將虛擬機設(shè)置為橋接模式

1.3修改配置文件

# sudo vi /etc/default/tftpd-hpa

TFTP_USERNAME="tftp"

TFTP_DIRECTORY="/tftpboot" #****指定tftp服務(wù)器的根目錄,就是下載文件的位置

TFTP_ADDRESS="0.0.0.0:69"

TFTP_OPTIONS="-c -s -l" #這里是選項,-c是可以上傳文件的參數(shù),-s是指定tftpd-hpa服務(wù)目錄,上面已經(jīng)指定 -l 監(jiān)聽模式

創(chuàng)建tftpboot目錄,重啟啟動 tftp-server

#sudo mkdir /tftpboot

#sudo chmod 777 /tftpboot

#sudo service tftpd-hpa restart

2.通過TFTP服務(wù)器移植系統(tǒng)

通過網(wǎng)線將(Ubuntu)中tftp文件夾下的系統(tǒng)配置文件燒寫到開發(fā)板中

2.1燒寫kernel(uImage)

1. 拷貝uImage到虛擬機的/tftpboot

2. 下載uImage到開發(fā)板內(nèi)存(0x41000000)

# tftp 41000000(內(nèi)存地址) uImage

2.2 燒寫設(shè)備樹(exynos4412-fs4412.dtb)

1. 拷貝exynos4412-fs4412.dtb到虛擬機的/tftpboot

2. 下載exynos4412-fs4412.dtb到開發(fā)板內(nèi)存(0x41000000)

# tftp 0x41000000(內(nèi)存地址) exynos4412-fs4412.dtb

3. 燒寫exynos4412-fs4412.dtb到emmc

# movi write dtbs(分區(qū)名) 0x41000000(內(nèi)存,放了exynos4412-fs4412.dtb)

2.3燒寫文件系統(tǒng)rootfs(ramdisk.img)

1. 拷貝ramdisk.img到虛擬機的/tftpboot

2. 下載ramdisk.img到開發(fā)板內(nèi)存(0x41000000)

# tftp 0x41000000(內(nèi)存地址) ramdisk.img

3. 燒寫ramdisk.img到emmc

# movi write rootfs(分區(qū)名) 0x41000000(內(nèi)存,放了ramdisk.img) 0x300000(分區(qū)大小)

2.4手動啟動

1. 設(shè)置內(nèi)核的啟動參數(shù)

# setenv bootargs init=/linuxrc(告訴內(nèi)核第一個應(yīng)用程序的位置) console=ttySAC2,115200(告訴內(nèi)核哪個終端是它的輸入/輸出終端)

# saveenv

2. 讀取kernel到內(nèi)存(運行時以下三個文件要并存,地址要偏移下,不要覆蓋)

# movi read kernel 0x41000000

3. 讀取設(shè)備樹到內(nèi)存

# movi read dtbs 0x42000000

4. 讀取rootfs(ramdisk.img)到內(nèi)存

# movi read rootfs 0x43000000(放在內(nèi)存的位置) 0x300000(大小)

5. 啟動內(nèi)核

#bootm 0x41000000(內(nèi)核) 0x43000000(根文件系統(tǒng)) 0x42000000(設(shè)備樹的位置)

2.5自動啟動

1. 原理

u-boot啟動后,如果倒計時到0, 它會自動運行bootcmd環(huán)境變量中的命令

2. 設(shè)置bootcmd環(huán)境變量

# setenv bootcmd movi read kernel 0x41000000\;movi read dtbs 0x42000000\;movi read rootfs 0x43000000 0x300000\;bootm 0x41000000 0x43000000 0x42000000

# saveenv

3. 重啟開發(fā)板

注:當(dāng)出現(xiàn)下載不動,終端一直打印T時,檢查服務(wù)器配置,端口設(shè)置,重啟服務(wù)器

3.通過NFS服務(wù)器掛載網(wǎng)絡(luò)文件系統(tǒng)

3.1原理

將開發(fā)板上的文件系統(tǒng)掛載到服務(wù)器(Ubuntu)上,實現(xiàn)服務(wù)器和開發(fā)板可以同時對改文件系統(tǒng)進行操作。

3.2 安裝

#sudo apt-get install nfs-kernel-server nfs-common

3.3修改配置文件系統(tǒng)

sudo vi /etc/exports

在注視下添加一行:

/source/rootfs *(rw,sync,no_root_squash,no_subtree_check)

/source/rootfs”是存放nfs文件系統(tǒng)的路徑;“*”表示在所有的網(wǎng)段都可以共享;“rw”表示nfs文件系統(tǒng)允許讀寫;

“sync”表示修改都會同步到nfs服務(wù)端,否則只是會暫存在本地內(nèi)存;

新建配置文件指定的對應(yīng)的nfs服務(wù)器根目錄

sudo mkdir -p /source/rootfs

重啟nfs服務(wù)程序,使配置生效

sudo service nfs-kernel-server restart

3.4就該開發(fā)板Uboot的內(nèi)核啟動參數(shù)

//根文件系統(tǒng)通過nfs協(xié)議去掛載 網(wǎng)絡(luò)文件系統(tǒng)存放的位置

#setenv bootargs root=/dev/nfs rw nfsroot=192.168.1.250:/source/rootfs ip=192.168.1.4(內(nèi)核用到的ip地址,因為內(nèi)核要和nfs服務(wù)器進行網(wǎng)絡(luò)通訊) console=ttySAC2,115200 init=/linuxrc

(3) 設(shè)置自動運行命令

#setenv bootcmd tftp 41000000 uImage\;tftp 42000000 exynos4412-fs4412.dtb\;bootm 41000000 - 42000000 ("-"表示不指定根文件系統(tǒng)地址)

#saveenv

3. boot或重啟開發(fā)板

二.U-boot

1.BootLoader.

1.1簡介:

屬于嵌入式系統(tǒng)的軟件層次,固話在固件中的boot程序,類似于(BOIS),grub,它是在操作系統(tǒng)運行前執(zhí)行的一小段程序,主要是用于引導(dǎo)操作系統(tǒng)。

1.2基本功能

a.初始化硬件 b.把BootLoader自搬到內(nèi)存中 c.執(zhí)行用戶命令(訪問環(huán)境變量,網(wǎng)絡(luò),串口通訊,讀寫ram/flash) d.設(shè)置Linux啟動參數(shù)

1.3 執(zhí)行過程

不同的處理器上電或復(fù)位后執(zhí)行的第一條指令地址并不相同,對于 ARM 處理器來說,該地址為 0x00000000。

對于一般的嵌入式系統(tǒng),通常把 Flash 等非易失性存儲器映射到這個地址處,而 Bootloader就位于該存儲器的最前端,

所以系統(tǒng)上電或復(fù)位后執(zhí)行的第一段程序便是Bootloader。而因為存儲 Bootloader的存儲器不同,Bootloader的執(zhí)行過程也并不相同,

嵌入式系統(tǒng)中廣泛采用的非易失性存儲器通常是 Flash,而 Flash 又分為 Nor Flash 和Nand Flash 兩種。

它們之間的不同在于:Nor Flash 支持芯片內(nèi)執(zhí)行(XIP, eXecute In Place),這樣代碼可以在Flash上直接執(zhí)行而不必拷貝到RAM中去執(zhí)行。

而Nand Flash并不支持XIP,所以要想執(zhí)行 Nand Flash 上的代碼,必須先將其拷貝到 RAM中去,然后跳到 RAM 中去執(zhí)行

2.uboot分析

2.1 uboot特點

代碼結(jié)構(gòu)清晰,易于一直,支持多種CUP,可以支持多種操作系統(tǒng),支持許多開發(fā)板,支持多種協(xié)議文件系統(tǒng)。

2.2uboot常用命令

setenv var value 設(shè)置環(huán)境變量

setenv var 刪除var變量

saveenv <==>save

printenv <==> pri

特殊變量 bootcmd uboot在自啟動模式下會自動執(zhí)行。

bootcmd 在uboot啟動的時候,當(dāng)?shù)褂嫊r到0的時候,uboot會去找到bootcmd環(huán)境變量,取得它的值。

bootcmd的值都是一些uboot可執(zhí)行的命令,uboot會去自動執(zhí)行這些命令。

bootargs linux內(nèi)核啟動參數(shù),uboot會將此環(huán)境變量的值存到啟動參數(shù)區(qū),內(nèi)核在啟動的時候,首先會去啟動參數(shù)區(qū)

獲取相關(guān)參數(shù),解析處理,做相應(yīng)的處理。參數(shù)格式,名稱不能隨意,固定的。

2.3uboot啟動流程

第一階段:匯編

1>初始化硬件(CPU內(nèi)部的寄存器)

2>初始化RAM,為第二階段程序準(zhǔn)備空間

3>拷貝第二階段的程序到內(nèi)存空間

4>跳轉(zhuǎn)到第二階段C入口

第二階段:C語言

1>初始化硬件(板級硬件設(shè)備)

2>將內(nèi)核和根文件系統(tǒng)鏡像加載到內(nèi)存中

3>執(zhí)行內(nèi)核

3.U-BOOT移植

3.1基本步驟

1.找到相近的代碼,并拷貝一份作為自己修改的源碼

2.先修改源碼,使能核心部件(uart clock ram..),能串口輸出信息。

3.移植修改其他非核心源碼

三.Linux內(nèi)核

1 Linux內(nèi)核的基本組成

a.MM內(nèi)存管理

b.PM進程管理

c.FS文件系統(tǒng)

d.DC驅(qū)動架構(gòu)

e.NET網(wǎng)絡(luò)

f.驅(qū)動代碼(占很大部分代碼)

Linux內(nèi)核是一個有文件系統(tǒng),多任務(wù)管理,硬件抽象層2等功能的系統(tǒng)軟件。內(nèi)核不是一個完整的操作系統(tǒng)

linux系統(tǒng) = Linux kernel + lib + apps + GUI(圖形界面 qt window gome)

2.Linux內(nèi)核的特征

2.1特點

1.可裁剪,可擴展,可定制。

2.可移植性強,支持多種體系結(jié)構(gòu)。

3.穩(wěn)定性強,網(wǎng)絡(luò)功能強。

4.支持多任務(wù)多用戶,資源耗費少。

2.2內(nèi)核源碼目錄

git分布式 svn托管 代碼管理系統(tǒng)

*arch 體系結(jié)構(gòu)相關(guān)代碼,各體系結(jié)構(gòu)cpu

arch/arm/板子 arm體系結(jié)構(gòu) 目錄都是開發(fā)板

mach-開發(fā)板名稱

開發(fā)板相關(guān)代碼,以前有各個板子硬件信息。

后面device tree技術(shù)出來之后,硬件信息提取出來。

boot/compressed 下面是壓縮解壓代碼(image<->zImage --mkimage--> uImage)

arch/arm/kernel/head.S是第一個被執(zhí)行文件

boot/dts 設(shè)備樹源碼文件

.dtsi 設(shè)備樹頭文件 .h

.dts 設(shè)備樹源碼 .c

.dtb 被編譯過的產(chǎn)物

*Documentation 文檔

init 內(nèi)核啟動初始化代碼 不可裁剪

lib 通用庫實現(xiàn)

sound 音頻驅(qū)動

block 塊設(shè)備

*drivers 設(shè)備驅(qū)動

ipc 進程間通訊

fs 文件系統(tǒng)

include 通用頭文件

kernel 核心代碼不可裁剪 pm

scripts 配置編譯腳本 這些腳本用于系統(tǒng)源碼的配置和編譯

mm 內(nèi)存管理

3.配置編譯

1.修改源碼目錄下頂層的Makefile

ARCH ?= arm

CROSS_COMPILE ?= arm-none-linux-gnueabi-

2.找一個與開發(fā)板類似的缺省配置,參考導(dǎo)入默認參考配置

make exynos_defconfig(只用執(zhí)行一次,生成一個默認的.config)

3.執(zhí)行配置命令

make menuconfig 字符界面配置菜單,需要ncureses庫

sudo apt-get install ncurses-dev

4.內(nèi)核啟動流程

上電--->CPU跳到中斷向量處執(zhí)行--->加載并執(zhí)行bootloader代碼--->加載內(nèi)核--->

執(zhí)行內(nèi)核---->掛載根文件系統(tǒng)--》運行第一個用戶空間程序 bootargs init=/linuxrc

上一篇:C++學(xué)習(xí)總結(jié),學(xué)霸課堂筆記

下一篇:linux系統(tǒng)入門學(xué)習(xí),讓你從linux基礎(chǔ)開始

熱點文章推薦
華清學(xué)員就業(yè)榜單
高薪學(xué)員經(jīng)驗分享
熱點新聞推薦
前臺專線:010-82525158 企業(yè)培訓(xùn)洽談專線:010-82525379 院校合作洽談專線:010-82525379 Copyright © 2004-2022 北京華清遠見科技集團有限公司 版權(quán)所有 ,京ICP備16055225號-5,京公海網(wǎng)安備11010802025203號

回到頂部