<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > ARM嵌入式設備Linux系統啟動(dòng)步驟和方式

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

作者: 時(shí)間:2016-07-19 來(lái)源:網(wǎng)絡(luò ) 收藏

  1). 簡(jiǎn)介

本文引用地址:http://dyxdggzs.com/article/201607/294237.htm

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

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

  a). 電源上電,系統Reset。

  b). CPU內部boot ROM讀取, strapping GPIO數值鎖定。

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

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

  e). DDR RAM被boot ROM初始化。

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

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

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

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

  i). U-Boot 自動(dòng)檢測系統RAM和eMMC/Nand Flash容量和參數

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

  k). U-Boot 加載 kernel到RAM,至此系統控制權則轉移到kernel來(lái)處理

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

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

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

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

  c). U-Boot位于eMMC,從eMMC啟動(dòng);而kernel從TFTP加載,rootfs從NFS加載。常用于kernel和application開(kāi)發(fā)調試階段

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

  這里使用Toradex Apalis i.MX6Q 計算機模塊配合Apalis Eva 開(kāi)發(fā)載板來(lái)進(jìn)行測試,平臺基本的操作上手指南請見(jiàn)這里。

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

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

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

  b). Kernel和rootfs從SD卡啟動(dòng)

  ./ 準備SD卡:將SD卡(幾百MB容量以上,這里使用8GB)分為2個(gè)分區,第一個(gè)分區為FAT32格式,一般幾十MB即可,這里演示操作為1GB;另外一個(gè)分區為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 = 扇區 of 1 * 512 = 512 bytes

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

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

  Disk identifier: 0x00000000

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

  /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卡

  // 復制Linux image 壓縮包里面的kernel和device tree文件到FAT32分區

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

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

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

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

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

  // 復制Linux image 壓縮包里面的rootfs文件夾內容到ext3分區

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

  $ cd .../Apalis_iMX6_LinuxImageV2.5

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

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

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

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

  Apalis iMX6 # printenv

  ...

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

  ...

  Apalis iMX6 # run sdboot

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

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

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

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

  ./ 配置TFTP Server

  // 在Ubuntu 開(kāi)發(fā)主機通過(guò)下面命令建立TFTP Server

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

  $ sudo apt-get install tftpd-hpa

  $ sudo vi /etc/default/tftpd-hpa

  //默認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),重新加載配置,則可運行

  $ sudo service tftpd-hpa force-reload

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

  // 復制kernel和device tree文件到TFTP Server文件夾

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

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

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

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

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

  ./ 配置NFS Server

  // 在Ubuntu 開(kāi)發(fā)主機通過(guò)下面命令建立NFS Server

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

  $ sudo apt-get install nfs-kernel-server

  $ sudo vi /etc/exports

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

  /srv/nfs 10.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目標系統

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

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

  # 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:on root=/dev/nfs nfsroot=10.20.1.111:/srv/nfs rw netdevwait’

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

  // 啟動(dòng)NFS boot

  # run nfsboot

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

  5). 總結

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



關(guān)鍵詞: ARM Linux

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>