工控網(wǎng)首頁
>

應用設(shè)計

>

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

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

1). 簡介

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

2). 啟動步驟

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

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

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

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

e). DDR RAMboot ROM初始化。

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

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

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

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

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

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

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

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

3). 啟動方式

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

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

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

4). 不同啟動方式演示

這里使用ToradexApalis i.MX6Q計算機模塊配合ApalisEva 開發(fā)載板來進行測試,平臺基本的操作上手指南請見這里。

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

a). 全部從eMMC啟動

模塊默認的U-Boot設(shè)置即為全部從eMMC啟動,開機上電即可

b). KernelrootfsSD卡啟動

./ 準備SD卡:將SD(幾百MB容量以上,這里使用8GB)分為2個分區(qū),第一個分區(qū)為FAT32格式,一般幾十MB即可,這里演示操作為1GB;另外一個分區(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è)備啟動      起點          終點     塊數(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

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

./ 制作啟動SD

// 復制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

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

// 復制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卡插槽, 開機上電進入uboot

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

Apalis iMX6 # printenv

...

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

...

Apalis iMX6 # run sdboot

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

./ 啟動后就可以進行正常的應用開發(fā)測試了.

c).TFTP/NFS加載kernel/filesystem啟動

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

./ 配置TFTP Server

// Ubuntu 開發(fā)主機通過下面命令建立TFTPServer

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

$ sudo apt-get install tftpd-hpa

$ sudo vi /etc/default/tftpd-hpa

//默認tftp server配置,也可以更換目錄,不過需要修改目錄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)啟動,重新加載配置,則可運行

$ sudo service tftpd-hpa force-reload

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

// 復制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 開發(fā)主機通過下面命令建立NFSServer

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

$ sudo apt-get install nfs-kernel-server

$ sudo vi /etc/exports

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

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

$ sudo service nfs-kernel-server restart

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

// 復制rootfs文件到NFS Server文件夾

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

$ cd .../Apalis_iMX6_LinuxImageV2.5

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

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

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

//開機上電進入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 = 目標板IP:NFS Server IP:網(wǎng)關(guān):Mask

// 啟動NFS boot

# run nfsboot

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

5). 總結(jié)

由上可見,在ARM平臺使用和開發(fā)的時候可以靈活利用各種啟動方式,提供更為方便和高效的開發(fā)或使用過程。

參考文檔

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

投訴建議

提交

查看更多評論
其他資訊

查看更多

Verdin AM62 LVGL 移植

基于 NXP iMX8MM 測試 Secure Boot 功能

隆重推出 Aquila - 新一代 Toradex 計算機模塊

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

NXP iMX8MM Cortex-M4 核心 GPT Capture 測試