工控網(wǎng)首頁(yè)
>

應(yīng)用設(shè)計(jì)

>

ARM嵌入式設(shè)備Linux系統(tǒng)啟動(dòng)步驟和方式

ARM嵌入式設(shè)備Linux系統(tǒng)啟動(dòng)步驟和方式

1). 簡(jiǎn)介

本文簡(jiǎn)單介紹ARM嵌入式設(shè)備基于嵌入式Linux操作系統(tǒng)時(shí)候的啟動(dòng)步驟和啟動(dòng)方式, 區(qū)別與X86平臺(tái),ARM平臺(tái)下并沒(méi)有一個(gè)標(biāo)準(zhǔn)的啟動(dòng)步驟,不同ARM SoC都會(huì)使用各自定義的boot ROM來(lái)實(shí)現(xiàn)啟動(dòng)過(guò)程,不過(guò)大體上面都包含有一些基本步驟。本文就基于Toradex ARM計(jì)算機(jī)模塊和配套載板來(lái)介紹基于Freescale i.MX6 ARM嵌入式設(shè)備的啟動(dòng)步驟和方式。

2). 啟動(dòng)步驟

a). 電源上電,系統(tǒng)Reset。

b). CPU內(nèi)部boot ROM讀取, strappingGPIO數(shù)值鎖定。

c). 根據(jù)strapping GPIO值和SoC 內(nèi)部fuse設(shè)置確定用于啟動(dòng)的設(shè)備。

d). 從啟動(dòng)設(shè)備起始位置讀取用于配置DDRRAM和定位boot loader的配置信息。對(duì)于i.MX6平臺(tái),則使用'image vector table (IVT)' 'deviceconfiguration data (DCD)' ,如果從NAND設(shè)備啟動(dòng),則還包括 'boot control blocks (BCB)'。

e). DDR RAMboot ROM初始化。

f). boot loader從啟動(dòng)設(shè)備復(fù)制到RAM執(zhí)行,至此系統(tǒng)控制交由bootloader.也是從這里,一些定制代碼才可以在boot loader里面開(kāi)始執(zhí)行。當(dāng)然也有一些SoC是先將boot loader復(fù)制到SDRAM執(zhí)行后再由boot loader來(lái)初始化DDR RAM

Toradex ARM核心板使用定制化的U-boot作為boot loader,下面就基于此來(lái)繼續(xù)bootloader加載后的啟動(dòng)過(guò)程。

g). U-Boot從啟動(dòng)設(shè)備上面讀取環(huán)境變量,如果變量數(shù)據(jù)損壞或者不存在,則會(huì)提示'*** Warning - bad CRC, using default environment' ,然后加載默認(rèn)初始設(shè)置.

h). U-Boot通過(guò)分析環(huán)境變量獲得kernelrootfs存儲(chǔ)位置,以及所需的kernelcommand line

i). U-Boot 自動(dòng)檢測(cè)系統(tǒng)RAMeMMC/NandFlash容量和參數(shù)

j). U-Boot 設(shè)置以太網(wǎng)口MAC地址,并配置好硬件準(zhǔn)備加載Linuxkernel

k). U-Boot 加載Linux kernelRAM,至此系統(tǒng)控制權(quán)則轉(zhuǎn)移到kernel來(lái)處理

l). 系統(tǒng)Kernel初始化Linux,加載rootfs,最后啟動(dòng)'init'來(lái)初始化Linuxuser space

3). 啟動(dòng)方式

a). 默認(rèn)方式, U-Boot, kernelrootfs都位與模塊自帶的eMMC上,全部從eMMC啟動(dòng)。通常情況下的基本模式

b). U-Boot位于eMMC,從eMMC啟動(dòng);而kernelrootfs位于SD卡,從SD卡啟動(dòng)。常用于切換不同的kernelrootfs版本

c). U-Boot位于eMMC,從eMMC啟動(dòng);而kernelTFTP加載,rootfsNFS加載。常用于kernelapplication開(kāi)發(fā)調(diào)試階段

4). 不同啟動(dòng)方式演示

這里使用ToradexApalis i.MX6Q計(jì)算機(jī)模塊配合ApalisEva 開(kāi)發(fā)載板來(lái)進(jìn)行測(cè)試,平臺(tái)基本的操作上手指南請(qǐng)見(jiàn)這里

軟件使用Toradex官方發(fā)布的LinuxV2.5beta3版本,請(qǐng)從這里下載。

a). 全部從eMMC啟動(dòng)

模塊默認(rèn)的U-Boot設(shè)置即為全部從eMMC啟動(dòng),開(kāi)機(jī)上電即可

b). KernelrootfsSD卡啟動(dòng)

./ 準(zhǔn)備SD卡:將SD(幾百MB容量以上,這里使用8GB)分為2個(gè)分區(qū),第一個(gè)分區(qū)為FAT32格式,一般幾十MB即可,這里演示操作為1GB;另外一個(gè)分區(qū)為ext3格式,分配為剩下SD卡容量。

----------------------------------

$ sudo fdisk /dev/sdc

...

命令(輸入 m 獲取幫助) p

Disk /dev/sdc: 7744 MB, 7744782336 bytes

255 heads, 63 sectors/track, 941 cylinders,total 15126528 sectors

Units = 扇區(qū) of 1 * 512 = 512bytes

Sector size (logical/physical): 512 bytes /512 bytes

I/O size (minimum/optimal): 512 bytes / 512bytes

Disk identifier: 0x00000000

  設(shè)備啟動(dòng)      起點(diǎn)          終點(diǎn)     塊數(shù)   Id  系統(tǒng)

/dev/sdc1            2048     2099199    1048576    c  W95 FAT32 (LBA)

/dev/sdc2         2099200    15126527    6513664   83  Linux

$ sudo mkfs.vfat -F 32 -n boot /dev/sdc1

$ sudo mkfs.ext3 -L fs /dev/sdc2

----------------------------------

./ 制作啟動(dòng)SD

// 復(fù)制Linux image 壓縮包里面的kerneldevice tree文件到FAT32分區(qū)

----------------------------------

$ cd.../Apalis_iMX6_LinuxImageV2.5/apalis-imx6_bin

$ cpuImage--3.14.28+gitr0632def1c9981e3974f724025f39b2c1588d8ee6-V2.5b3-apalis-imx6-20151215145612.bin/media/username/boot/uImage

$ cpuImage--3.14.28+gitr0632def1c9981e3974f724025f39b2c1588d8ee6-V2.5b3-imx6q-apalis-eval-20151215145612.dtb/media/simon/boot/imx6q-apalis-eval.dtb

----------------------------------

// 復(fù)制Linux image 壓縮包里面的rootfs文件夾內(nèi)容到ext3分區(qū)

----------------------------------

$ cd .../Apalis_iMX6_LinuxImageV2.5

$ sudo cp -Ppr rootfs/* /media/simon/fs/

----------------------------------

./ SD卡插入Apalis Eva載板8-bit SD卡插槽, 開(kāi)機(jī)上電進(jìn)入uboot

----------------------------------

Apalis iMX6 # printenv

...

fdt_file=imx6q-apalis-eval.dtb //確保device tree文件和上面FAT32分區(qū)里面的命名一致

...

Apalis iMX6 # run sdboot

----------------------------------

./ 啟動(dòng)后就可以進(jìn)行正常的應(yīng)用開(kāi)發(fā)測(cè)試了.

c).TFTP/NFS加載kernel/filesystem啟動(dòng)

./ 默認(rèn)目標(biāo)版系統(tǒng)和開(kāi)發(fā)主機(jī)已經(jīng)在同一局域網(wǎng)內(nèi)并通過(guò)網(wǎng)內(nèi)DHCP服務(wù)器自動(dòng)取得IP地址,如果需要手動(dòng)搭建DHCP服務(wù)器,請(qǐng)參考這里。

./ 配置TFTP Server

// Ubuntu 開(kāi)發(fā)主機(jī)通過(guò)下面命令建立TFTPServer

----------------------------------

$ sudo apt-get install tftpd-hpa

$ sudo vi /etc/default/tftpd-hpa

//默認(rèn)tftp server配置,也可以更換目錄,不過(guò)需要修改目錄group為”nogroup

$ sudo vi /etc/default/tftpd-hpa

TFTP_USERNAME="tftp"

TFTP_DIRECTORY="/var/lib/tftpboot"

TFTP_ADDRESS="[::]:69"

TFTP_OPTIONS="--secure"

$ sudo service tftpd-hpa start

//如已經(jīng)啟動(dòng),重新加載配置,則可運(yùn)行

$ sudo service tftpd-hpa force-reload

----------------------------------

// 復(fù)制kerneldevice tree文件到TFTPServer文件夾

----------------------------------

$ cd .../Apalis_iMX6_LinuxImageV2.5/apalis-imx6_bin

$ sudo cpuImage--3.14.28+gitr0632def1c9981e3974f724025f39b2c1588d8ee6-V2.5b3-apalis-imx6-20151215145612.bin/var/lib/tftpboot/uImage

$ sudo cpuImage--3.14.28+gitr0632def1c9981e3974f724025f39b2c1588d8ee6-V2.5b3-imx6q-apalis-eval-20151215145612.dtb/var/lib/tftpboot/imx6q-apalis-eval.dtb

----------------------------------

./ 配置NFS Server

// Ubuntu 開(kāi)發(fā)主機(jī)通過(guò)下面命令建立NFSServer

----------------------------------

$ sudo apt-get install nfs-kernel-server

$ sudo vi /etc/exports

//增加下面NFS配置, 10.20.1.111/24’為開(kāi)發(fā)主機(jī)IP/Mask配置

/srv/nfs10.20.1.111/24(no_root_squash,no_subtree_check,rw,fsid=root)

$ sudo service nfs-kernel-server restart

----------------------------------

// 復(fù)制rootfs文件到NFS Server文件夾

----------------------------------

$ cd .../Apalis_iMX6_LinuxImageV2.5

$ sudo cp -Ppr rootfs/* /srv/nfs/

----------------------------------

./ 配置Apalis i.MX6目標(biāo)系統(tǒng)

//開(kāi)機(jī)上電進(jìn)入Uboot,修改如下參數(shù)

----------------------------------

# setenv serverip ‘10.20.1.111’  //TFTP Server IP

# setenv nfsargs ‘ip=10.20.1.115:10.20.1.111:10.20.1.1:255.255.255.0::eth0:onroot=/dev/nfs nfsroot=10.20.1.111:/srv/nfs rw netdevwait’

// ip = 目標(biāo)板IP:NFS Server IP:網(wǎng)關(guān):Mask

// 啟動(dòng)NFS boot

# run nfsboot

----------------------------------

5). 總結(jié)

由上可見(jiàn),在ARM平臺(tái)使用和開(kāi)發(fā)的時(shí)候可以靈活利用各種啟動(dòng)方式,提供更為方便和高效的開(kāi)發(fā)或使用過(guò)程。

參考文檔

http://developer.toradex.com/knowledge-base/linux-booting

投訴建議

提交

查看更多評(píng)論
其他資訊

查看更多

Verdin AM62 LVGL 移植

基于 NXP iMX8MM 測(cè)試 Secure Boot 功能

隆重推出 Aquila - 新一代 Toradex 計(jì)算機(jī)模塊

Verdin iMX8MP 調(diào)試串口更改

NXP iMX8MM Cortex-M4 核心 GPT Capture 測(cè)試