久久婷婷香蕉热狠狠综合,精品无码国产自产拍在线观看蜜,寡妇房东在做爰3,中文字幕日本人妻久久久免费,国产成人精品三上悠亚久久

當前位置:首頁 > 嵌入式培訓 > 嵌入式學習 > 學習筆記 > 系統移植(zhi)詳細步驟(zou),學(xue)霸(ba)總結

系統(tong)移植(zhi)詳(xiang)細(xi)步驟(zou),學霸總結 時間:2018-08-24      來源:未知

系統移植

一.服務器的搭建(jian)

1. TFTP服務器

1.1 安裝

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

1.2配置(zhi)服務器客戶端在同一網(wang)段

服(fu)務器 (Ubuntu)$ sudo ifconfig eth0(網卡) 192.168.~.~ netmask 255.255.255.0

上(shang)面(mian)的命令,將ip地址和子網(wang)掩碼設(she)置(zhi)到內(nei)核(he);

當網卡斷開(kai)時,內核會丟掉ip地址;

當網卡連接時,內核會從配置文件(從網絡自動獲取(qu))讀取(qu)ip地址和子網掩碼(ma)

客戶端(duan) (開(kai)發板)# setenv ipaddr 192.168.~.~ 將ip地址設置到ipaddr環(huan)境(jing)變量

# setenv netmask 255.255.255.0 設置子網掩碼

# saveenv 保(bao)存所有的環境變量到emmc

網(wang)卡:將虛(xu)擬(ni)機設置為橋接模式

1.3修(xiu)改配置文件

# sudo vi /etc/default/tftpd-hpa

TFTP_USERNAME="tftp"

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

TFTP_ADDRESS="0.0.0.0:69"

TFTP_OPTIONS="-c -s -l" #這里(li)是選(xuan)項,-c是可以上(shang)傳文(wen)件(jian)的參數(shu),-s是指定tftpd-hpa服務目(mu)錄,上(shang)面(mian)已經指定 -l 監(jian)聽(ting)模式(shi)

創(chuang)建tftpboot目錄,重啟啟動 tftp-server

#sudo mkdir /tftpboot

#sudo chmod 777 /tftpboot

#sudo service tftpd-hpa restart

2.通(tong)過(guo)TFTP服務器移植系(xi)統(tong)

通(tong)過(guo)網(wang)線將(Ubuntu)中(zhong)tftp文件夾下的(de)系統配置文件燒寫到開(kai)發(fa)板中(zhong)

2.1燒寫kernel(uImage)

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

2. 下載uImage到開發(fa)板內存(0x41000000)

# tftp 41000000(內存地址) uImage

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

1. 拷(kao)貝exynos4412-fs4412.dtb到(dao)虛擬(ni)機的/tftpboot

2. 下(xia)載exynos4412-fs4412.dtb到開發板(ban)內存(0x41000000)

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

3. 燒寫exynos4412-fs4412.dtb到(dao)emmc

# movi write dtbs(分區名) 0x41000000(內存,放(fang)了(le)exynos4412-fs4412.dtb)

2.3燒寫文件(jian)系統rootfs(ramdisk.img)

1. 拷貝ramdisk.img到虛(xu)擬機的(de)/tftpboot

2. 下載ramdisk.img到開發板內存(0x41000000)

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

3. 燒寫ramdisk.img到emmc

# movi write rootfs(分(fen)區名) 0x41000000(內存,放了(le)ramdisk.img) 0x300000(分(fen)區大小)

2.4手動(dong)啟動(dong)

1. 設置(zhi)內核的啟動參數

# setenv bootargs init=/linuxrc(告訴內核(he)第一個(ge)應用程(cheng)序的位置(zhi)) console=ttySAC2,115200(告訴內核(he)哪(na)個(ge)終端是它的輸(shu)入/輸(shu)出終端)

# saveenv

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

# movi read kernel 0x41000000

3. 讀取設備樹到內存

# movi read dtbs 0x42000000

4. 讀取(qu)rootfs(ramdisk.img)到內存

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

5. 啟(qi)動內核

#bootm 0x41000000(內核) 0x43000000(根文件系統(tong)) 0x42000000(設備(bei)樹的位置)

2.5自動啟動

1. 原理

u-boot啟動(dong)后,如(ru)果(guo)倒計時到0, 它會自動(dong)運行bootcmd環境變(bian)量中的命(ming)令

2. 設置bootcmd環境變量

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

# saveenv

3. 重啟開發板

注:當出現下(xia)載不動,終端一直打印(yin)T時,檢查(cha)服務器配置,端口(kou)設置,重啟服務器

3.通過NFS服務器掛載網絡(luo)文件系統(tong)

3.1原理

將開發板上的(de)文件系統掛載到服務器(qi)(Ubuntu)上,實現(xian)服務器(qi)和開發板可以(yi)同時對(dui)改文件系統進行操作(zuo)。

3.2 安裝

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

3.3修改(gai)配置(zhi)文件系統(tong)

sudo vi /etc/exports

在注視(shi)下添加一行:

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

/source/rootfs”是存放nfs文件(jian)系統(tong)的路徑;“*”表示(shi)在所有的網段都可以共(gong)享;“rw”表示(shi)nfs文件(jian)系統(tong)允許讀寫(xie);

“sync”表示修改都會(hui)同(tong)步(bu)到nfs服務端,否則只是(shi)會(hui)暫存(cun)在本地內(nei)存(cun);

新建配置文件(jian)指(zhi)定的對應的nfs服務(wu)器根目(mu)錄

sudo mkdir -p /source/rootfs

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

sudo service nfs-kernel-server restart

3.4就該(gai)開(kai)發板Uboot的內核啟(qi)動參數

//根文件系統通過(guo)nfs協(xie)議去(qu)掛載(zai) 網絡文件系統存(cun)放(fang)的位置

#setenv bootargs root=/dev/nfs rw nfsroot=192.168.1.250:/source/rootfs ip=192.168.1.4(內核用到的ip地址(zhi),因為(wei)內核要和nfs服務(wu)器進行網絡通訊) console=ttySAC2,115200 init=/linuxrc

(3) 設置自動運(yun)行命(ming)令(ling)

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

#saveenv

3. boot或(huo)重(zhong)啟(qi)開發板

二.U-boot

1.BootLoader.

1.1簡介:

屬于(yu)嵌(qian)入式系(xi)(xi)統(tong)的軟件層次,固(gu)話在(zai)固(gu)件中的boot程序,類似(si)于(yu)(BOIS),grub,它是(shi)在(zai)操(cao)作系(xi)(xi)統(tong)運行前執行的一小(xiao)段程序,主(zhu)要(yao)是(shi)用于(yu)引導操(cao)作系(xi)(xi)統(tong)。

1.2基本功能

a.初(chu)始化硬件 b.把BootLoader自(zi)搬到內存中(zhong) c.執行用戶命(ming)令(訪問環境變量,網絡,串口(kou)通訊,讀寫ram/flash) d.設置(zhi)Linux啟動參數(shu)

1.3 執行過程

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

對(dui)于一(yi)般(ban)的嵌入式系統,通常(chang)把 Flash 等非易失性存儲(chu)器映射(she)到這個地址處(chu),而(er) Bootloader就位于該存儲(chu)器的最(zui)前端,

所(suo)以系統上電或(huo)復(fu)位(wei)后執行(xing)(xing)的(de)第一段程(cheng)序便是Bootloader。而因為存儲 Bootloader的(de)存儲器不同(tong),Bootloader的(de)執行(xing)(xing)過程(cheng)也并不相同(tong),

嵌(qian)入式(shi)系統(tong)中(zhong)廣泛采用的(de)非易失(shi)性存儲(chu)器通常(chang)是 Flash,而 Flash 又分為 Nor Flash 和Nand Flash 兩(liang)種(zhong)。

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

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

2.uboot分析(xi)

2.1 uboot特點(dian)

代碼結構清晰,易于(yu)一直,支(zhi)持(chi)多(duo)(duo)(duo)種(zhong)(zhong)CUP,可以支(zhi)持(chi)多(duo)(duo)(duo)種(zhong)(zhong)操作(zuo)系統,支(zhi)持(chi)許多(duo)(duo)(duo)開(kai)發板,支(zhi)持(chi)多(duo)(duo)(duo)種(zhong)(zhong)協議文件系統。

2.2uboot常用命令

setenv var value 設置(zhi)環(huan)境(jing)變量(liang)

setenv var 刪除var變(bian)量

saveenv <==>save

printenv <==> pri

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

bootcmd 在(zai)uboot啟動的時(shi)候,當倒計(ji)時(shi)到0的時(shi)候,uboot會去(qu)找到bootcmd環境變(bian)量,取得它的值。

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

bootargs linux內(nei)核(he)啟動(dong)參數,uboot會(hui)將此環境變(bian)量的(de)值存到啟動(dong)參數區,內(nei)核(he)在啟動(dong)的(de)時候,首先(xian)會(hui)去(qu)啟動(dong)參數區

獲取相關參數(shu),解析(xi)處(chu)理,做相應的(de)處(chu)理。參數(shu)格式(shi),名稱不(bu)能(neng)隨意,固定的(de)。

2.3uboot啟動流程

第一階段:匯編

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

2>初始化RAM,為第二階段程序準備空間

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

4>跳轉到第(di)二階段C入口

第二階段:C語言

1>初始化硬(ying)件(板級硬(ying)件設備(bei))

2>將內核和根文件系(xi)統鏡像加(jia)載到內存中(zhong)

3>執行(xing)內核(he)

3.U-BOOT移植

3.1基(ji)本步驟

1.找到(dao)相近的(de)代碼,并(bing)拷貝一(yi)份作為自己(ji)修改的(de)源碼

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

3.移(yi)植(zhi)修(xiu)改其他非核(he)心源碼

三.Linux內核(he)

1 Linux內核的基本(ben)組成(cheng)

a.MM內(nei)存管理

b.PM進程管(guan)理(li)

c.FS文件系統

d.DC驅動(dong)架構(gou)

e.NET網絡

f.驅(qu)動代(dai)碼(占很大部分代(dai)碼)

Linux內核是一(yi)個有文件系統,多任(ren)務管理(li),硬件抽象層2等功能的系統軟件。內核不(bu)是一(yi)個完(wan)整的操作系統

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

2.Linux內核的特(te)征

2.1特點

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

2.可移植性強,支持多種體系(xi)結構(gou)。

3.穩定性強,網(wang)絡功能強。

4.支持多(duo)任務多(duo)用戶(hu),資(zi)源耗(hao)費少。

2.2內核源碼(ma)目(mu)錄

git分布式 svn托管(guan) 代碼管(guan)理系統

*arch 體(ti)系結構(gou)相關代碼,各體(ti)系結構(gou)cpu

arch/arm/板子 arm體系(xi)結構 目錄(lu)都是開發板

mach-開發板名稱(cheng)

開發板相(xiang)關代碼,以前有各個板子硬(ying)件信息(xi)。

后面(mian)device tree技術出來之后,硬件(jian)信(xin)息提取出來。

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

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

boot/dts 設備樹(shu)源(yuan)碼文件(jian)

.dtsi 設(she)備樹(shu)頭文件(jian) .h

.dts 設備(bei)樹(shu)源碼 .c

.dtb 被編譯過的產物

*Documentation 文檔

init 內核啟動初始化代碼 不可(ke)裁(cai)剪

lib 通用庫實現

sound 音頻(pin)驅動

block 塊設備

*drivers 設備驅動

ipc 進程間通訊

fs 文件系統

include 通用頭(tou)文件(jian)

kernel 核心代碼(ma)不可裁剪 pm

scripts 配置(zhi)編(bian)譯腳本 這些腳本用于系統源碼的配置(zhi)和編(bian)譯

mm 內存(cun)管理

3.配置編譯

1.修(xiu)改源碼目錄(lu)下(xia)頂(ding)層的Makefile

ARCH ?= arm

CROSS_COMPILE ?= arm-none-linux-gnueabi-

2.找一個與開發(fa)板類似(si)的缺(que)省(sheng)配置,參(can)考導入默(mo)認參(can)考配置

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

3.執行配置命令

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

sudo apt-get install ncurses-dev

4.內(nei)核啟動流(liu)程

 上電--->CPU跳到中(zhong)斷向量處執行--->加(jia)載(zai)并執行bootloader代碼--->加(jia)載(zai)內核--->

執行內核(he)---->掛載根文件系(xi)統--》運行第一個用戶空間(jian)程序 bootargs init=/linuxrc

上一篇:C++學習總結,學霸課堂筆記

下一篇:linux系統入門學習,讓你從linux基礎開始

熱點文章推薦
華清學員就業榜單
高薪學員(yuan)經驗分享(xiang)
熱點(dian)新聞推薦
前臺專(zhuan)線(xian):010-82525158 企業培訓洽談專線:010-82525379 院校合(he)作洽談專線:010-82525379 Copyright © 2004-2022 北京華清遠見科技集團有限公司 版權所有 ,,京公海網安備11010802025203號

回到頂部