構建 ARM Linux 4.7.3 嵌入式開發環境 —— U-BOOT 引導 Kernel

来源:http://www.cnblogs.com/rain-blog/archive/2016/09/20/build-arm-linux-4-7-3-embedded-development-environment.html
-Advertisement-
Play Games

經過若幹天的反覆測試,搜索。終於成功利用 Qemu 在 u-boot 下引導 ARM Linux 4.7.3 內核。如下詳細解釋整個構建過程。 準備環境 運行環境:Ubuntu 16.04 需要的虛擬機:Qemu 交叉編譯環境:ARM GCC 內核源碼:Linux 4.7.3 u-boot源碼:u- ...


經過若幹天的反覆測試,搜索。終於成功利用 Qemu 在 u-boot 下引導 ARM Linux 4.7.3 內核。如下詳細解釋整個構建過程。

準備環境

  • 運行環境:Ubuntu 16.04
  • 需要的虛擬機:Qemu
  • 交叉編譯環境:ARM GCC
  • 內核源碼:Linux 4.7.3
  • u-boot源碼:u-boot-2016.09

安裝 Qemu 、 ARM GCC

$ sudo add-apt-repository ppa:linaro-maintainers/tools
$ sudo apt-get install linaro-image-tools qemu-user-static qemu-system
$ sudo apt-get install gcc-arm-linux-gnueabi g++-arm-linux-gnueabi
$ sudo apt install bridge-utils

下載、編譯 U-BOOT 源碼

  • 下載源碼
$ wget -c ftp://ftp.denx.de/pub/u-boot/u-boot-2016.09.tar.bz2
$ tar xvf u-boot-2016.09.tar.bz2
$ cd u-boot-2016.09
  • 修改配置文件 include/configs/vexpress_common.h
#define V2M_BASE        0x80000000
#define CONFIG_SYS_TEXT_BASE    0x80800000
#endif

/* 添加如下三行代碼 */
#define CONFIG_IPADDR   192.168.0.5
#define CONFIG_NETMASK  255.255.255.0
#define CONFIG_SERVERIP 192.168.0.3

/*
 * Physical addresses, offset from V2M_PA_CS0-3
 */
#define V2M_NOR0        (V2M_PA_CS0)
#define V2M_NOR1        (V2M_PA_CS1)
........
........
........
/* 對如下 CONFIG_BOOTCOMMAND 作出修改 */
/* Basic environment settings */
#define CONFIG_BOOTCOMMAND \
    "run distro_bootcmd; " \
    "run bootflash; "
#undef CONFIG_BOOTCOMMAND

#define CONFIG_BOOTCOMMAND "tftp 0x62008000 kernel; setenv bootargs 'root=/dev/mmcblk0 console=ttyAMA0,38400n8'; bootz 0x62008000"

#define BOOT_TARGET_DEVICES(func) \
        func(MMC, mmc, 1) \
        func(MMC, mmc, 0) \
        func(PXE, pxe, na) \
        func(DHCP, dhcp, na)
#include <config_distro_bootcmd.h>
  • 編譯源碼
$ make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- vexpress_ca9x4_defconfig
$ make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi-
$ mkdir -p ~/tftp
$ ln -sf $PWD/u-boot ~/tftp

準備內核鏡像文件

  • 下載源碼
$ wget -c https://cdn.kernel.org/pub/linux/kernel/v4.x/linux-4.7.3.tar.xz
$ tar xvf linux-4.7.3.tar.xz
$ make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- vexpress_defconfig
$ make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- menuconfig
  • 打開如下幾個選項

append-dtb debuguart nfs-client

  • 編譯,一個漫長的過程
$ make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- all
$ ln -sf arch/arm/boot/dts/vexpress-v2p-ca9.dtb ~/tftp
$ ln -sf arch/arm/boot/zImage ~/tftp

準備 Qemu 網路

  • qemu-ifup 內容如下。
#!/bin/sh
#
#cript to bring up the tun device in QEMU in bridged mode 
# first parameter is name of tap device (e.g. tap0)
#
# some constants specific to the local host - change to suit your host
#
ETH0IPADDR=192.168.0.3
MASK=255.255.255.0
GATEWAY=192.168.0.1
BROADCAST=192.168.0.255
ETH=enp0s3 # 根據自己的網路介面修改。
#
# First take eth0 down, then bring it up with IP address 0.0.0.0 
#
ifdown $ETH
ifconfig $ETH 0.0.0.0 promisc up
#
# Bring up the tap device (name specified as first argument, by QEMU)
#
#/usr/sbin/openvpn --mktun --dev $1 --user `id -un`
ifconfig $1 0.0.0.0 promisc up
#
# create the bridge between eth0 and the tap device
#
brctl addbr br0
brctl addif br0 $ETH
brctl addif br0 $1
# 
# only a single bridge so loops are not possible, turn off spanning tree protocol
#
brctl stp br0 off 
# 
# Bring up the bridge with ETH0IPADDR and add the default route 
#
ifconfig br0 $ETH0IPADDR netmask $MASK broadcast $BROADCAST
route add default gw $GATEWAY
#
# stop firewall - comment this out if you don't use Firestarter
#
#service firestarter stop 
  • qemu-ifdown
#!/bin/sh 
# 
# Script to bring down and delete bridge br0 when QEMU exits 
# 
# Bring down eth0 and br0 
#
ETH=enp0s3

ifdown $ETH
ifdown br0
ifconfig br0 down 
# 
# Delete the bridge
#
brctl delbr br0 
# 
# bring up eth0 in "normal" mode 
#
ifconfig $ETH -promisc
ifup $ETH 
#
# delete the tap device
#
#/usr/sbin/openvpn --rmtun --dev $1
#
# start firewall again
# 
#service firestarter start
  • 複製到 /etc 目錄
$ sudo cp qemu-if* /etc
$ sudo chmod +x /etc/qemu-if*

搭建 TFTP 服務

準備啟動 U-BOOT

  • append 設備樹到 zImage
$ cd ~/tftp && cp zImage kernel
$ cat express-v2p-ca9.dtb >> kernel
  • 啟動 U-BOOT
$ sudo qemu-system-arm -M vexpress-a9 \ 
                -m 128M -nographic \
                -net nic -net tap,ifname=tap0 \
                -kernel u-boot \
                -dtb vexpress-v2p-ca9.dtb
  • 如果中間沒有出現問題,則能成功啟動內核。
U-Boot 2016.07 (Sep 16 2016 - 11:18:06 +0800)

DRAM:  128 MiB
WARNING: Caches not enabled
Flash: 128 MiB
MMC:   MMC: 0
*** Warning - bad CRC, using default environment

In:    serial
Out:   serial
Err:   serial
Net:   smc911x-0
Hit any key to stop autoboot:  0 
smc911x: MAC 52:54:00:12:34:56
smc911x: detected LAN9118 controller
smc911x: phy initialized
smc911x: MAC 52:54:00:12:34:56
Using smc911x-0 device
TFTP from server 192.168.0.3; our IP address is 192.168.0.5
Filename 'kernel'.
Load address: 0x62008000
Loading: #################################################################
     #################################################################
     #################################################################
     #################################################################
     #################################################################
     #################################################################
     #################################################################
     #################################################################
     #################################################################
     #################################################################
     ################################################
     2 MiB/s
done
Bytes transferred = 3571036 (367d5c hex)
smc911x: MAC 52:54:00:12:34:56
Kernel image @ 0x62008000 [ 0x000000 - 0x3643e8 ]

Starting kernel ...

Uncompressing Linux... done, booting the kernel.
Booting Linux on physical CPU 0x0
Linux version 4.7.3 (rain@rain-pc) (gcc version 5.4.0 20160609 (Ubuntu/Linaro 5.4.0-6ubuntu1~16.04.1) ) #7 SMP Fri Sep 16 11:11:23 CST 2016
CPU: ARMv7 Processor [410fc090] revision 0 (ARMv7), cr=10c5387d
CPU: PIPT / VIPT nonaliasing data cache, VIPT nonaliasing instruction cache
Machine model: V2P-CA9
Memory policy: Data cache writeback
CPU: All CPU(s) started in SVC mode.

 

參考文章


 

Next : 構建 ARM Linux 4.7.3 嵌入式開發環境 —— BusyBox 構建 RootFS

原創文章、轉載請註明出處!


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 前言 已經不記得搭建過多少次LAMP的環境了,不僅僅在windows上折騰過,也在linux上弄過,windows倒還好,麻煩事不多,搭建過一次基本上下次就知道應該怎麼配置了,可是在linux每次搭建LAMP時我都總是忘記上一次是怎麼搭建成功的了... 所以一次又一次地去Google,找教程,而且發 ...
  • apt get直接更新即可 ...
  • MDK st-link下載STM32程式出現Internal command error和Error:Flash download failed. Target DLL Error: flash download failed - Target DLL has been cancelled MDK ...
  • 一、目錄處理文件 1.刪除文件或目錄 rm -rf [文件或目錄] //remove:刪除文件或目錄 -r:刪除目錄 -f:強制 2.複製文件或目錄 cp [選項] [原文件或目錄] [目標目錄] //[選項] -r:複製目錄 -p:連帶文件屬性複製 -d:若原文件是鏈接文件,則複製鏈接屬性 -a: ...
  • 由於需要,得搭建個nginx+tomcat+https的伺服器,搜了搜網上的發現總是有錯,現在整理了些有用的,備忘。 環境:Centos6.5、JDK1.8、Tomcat8、Nginx1.10.1準備材料:1.JDK1.8安裝包jdk-8u102-linux-x64.tar.gz 2.Tomcat8 ...
  • 一、硬碟安裝Windows10準備工作:1、首先下載硬碟安裝工具nt6 hdd installernt6 hdd installer是一款硬碟安裝系統工具,用戶無需藉助光碟機、U盤,可以直接在現有的系統中,直接安裝系統。 下載地址:http://222.76.215.233:81/soft/nt6hd ...
  • 最近把系統升級到 ubuntu16長期支持版 ,重新部署了lnmp環境 約定幾個目錄 源碼目錄 /usr/local/src mysql /usr/local/mysql php /usr/local/php nginx /usr/local/nginx mysql 版本 5.7.14 必備的包和工 ...
  • 上一篇我們已經成功將 ARM Linux 4.7.3 的內核利用 U-BOOT 引導了起來。但是細心的你會發現,引導到後面,系統無法啟動,出現內核恐慌 (Kernel Panic)。 原因是找不到文件系統。為了讓內核成功啟動,我們還需要構建一個根文件系統。為了後期開發的方便,我們採用 NFS 網路文 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...