Building Embedded Linux(1)

Slides:



Advertisements
Similar presentations
嵌入式系统简介 Introduction to Embedded System
Advertisements

LinkIt ONE開發板的簡介.
第二章 微型计算机系统 第一节 基本术语和基本概念 第二节 计算机系统的基本构成 第三节 微机系统的硬件组成 第四节 微机系统的软件组成.
ARM 嵌入式系统 第七章 嵌入式Linux.
第2章 SOPC硬件开发环境及流程.
基于ARM和linux的开发 华中科技大学 武汉创维特 2017/3/20.
UClinux在3000平台上的移植.
嵌入式系统应用 概述 随着现代物流业仓储、超市等行业的快速发展,物品流动的速度越来越快,仓储库存周期也越来越短。这样物流仓储盘点行业的压力也越来越大,传统的人工盘点方式已经不能适应现代物流的发展。为了解决这一问题,国际上一些物流先进国家已经采用专业的盘点设备——盘点机,用于物流盘点。 我们选取了一个十分典型的国产盘点机进行介绍。其微处理器选型是采用韩国三星公司生产的S3C2410微处理器,操作系统采用了Windows.
UNIX系統與資料庫安裝 Why UNIX 常用的工具程式介紹 資料庫的安裝.
Linux Further.
第四章 BootLoader开发 附-s3c2410/s3c2440处理器介绍
Linux.
第 2 章 中央處理單元.
Building Embedded Linux 2
第一章 嵌入式系统开发基础 本章介绍了嵌入式系统开发的基础知识,从嵌入式计算机的历史由来、嵌入式系统的定义、嵌入式系统的基本特点、嵌入式系统的分类及应用、嵌入式系统软硬件各部分组成、嵌入式系统的开发流程、嵌入式技术的发展趋势等方面进行了介绍,涉及到嵌入式系统开发的基本内容,使读者系统地建立起的嵌入式系统整体概念。
内核移植实例.
程式語言的基礎 Input Output Program 世代 程式語言 第一世代 Machine language 第二世代
臺北市立大學 資訊科學系(含碩士班) 賴阿福
程式設計概論 1.1 程式設計概論 程式語言的演進 物件導向程式 程式開發流程 1.2 C++開發工具
C H A P T E R 11 体系结构对操作系统的支持.
Java簡介.
Chapter 1 Introduction.
ARM存储器结构 ARM架构的处理器的存储器寻址空间有4G字节 ,存储空间可以分为 :
JDK 安裝教學 (for Win7) Soochow University
基礎linux指令說明 Part 1 資訊組 陳宜徽.
第1章 認識Arduino.
手機作業系統介紹.
C H A P T E R 10 存储器层次.
Bootloader技术分析.
第二章 Linux基本指令與工具操作 LINUX 按圖施工手冊.
张吉豫 GNU编译工具链使用简介 张吉豫
第14章 Bootloader基本概念與燒錄.
第二天 计算机基础技能培训 (一)linux基础知识
桌面環境簡介及IDE開發工具 Outline (一)什麼是Linux? (二)桌面環境系統簡介 (三)IDE開發工具.
R教學 安裝RStudio 羅琪老師.
陈香兰 助教:陈博、李春华 Spring 2009 嵌入式操作系统 陈香兰 助教:陈博、李春华 Spring 2009.
ASP.NET基本設計與操作 建國科技大學 資管系 饒瑞佶 2007年.
在專用的嵌入式板子運行 GNU/Linux 系統已經變得越來越流行。一個嵌入式 Linux 系統從軟體的角度看通常可以分為四個層次:
[LAB 3]Make OS SD Card Step1 Download the image file.
安裝JDK 安裝Eclipse Eclipse 中文化
2017 Operating Systems 作業系統實習 助教:陳主恩、林欣穎 實驗室:720A.
嵌入式系统的Boot Loader技术 陈文智 浙江大学计算机学院 2009年5月.
Android App簡介及 App Inventor 2體驗 靜宜大學資管系 楊子青
Linux-Ubuntu安裝及指令.
Fortran 程式語言 之 編與譯(二) 張基昇.
(第2版).
Linux核心編譯與模組管理 2013/01/19.
網路安全技術期末報告 Proxy Server
虛擬機器 下載QEMU Windows版 (0.9.1) 下載Kqemu Windows版 安裝QEMU 安裝Kqumu
Linux作業系統 電腦教室Linux使用說明.
(第2版).
嵌入式Linux开发流程 成都研究所操作系统团队.
ARM Developer Suite 介 绍.
安裝 / 操作 flashget SOP (以Win 7 作業系統為範例)
嵌入式系统教案 武汉创维特信息技术有限公司 2019/4/18.
Install OpenCV C++ with Visual Studio 2017 on Windows PC
Text To Speech (TTS, 文字轉 語音)、讀簡訊 靜宜大學資管系 楊子青
MiRanda Java Interface v1.0的使用方法
Unix 安裝過程 使用2個磁片 到 rawwrite bootnet.img drvnet.img 利用rawwrite 將image檔寫入磁片.
基本指令.
程式移植.
第二章ADS1.2开发环境创建与简介.
Cloud Operating System - Unit 03: 雲端平台建構實驗
2018 Operating Systems 作業系統實習 助教:林欣穎 實驗室:720A.
樹莓派安裝流程.
安裝JDK 配置windows win7 環境變數
Chapter 4 Multi-Threads (多執行緒).
第六章 文件系统与文件管理 6.4 Linux文件管理 1、比较MS DOS 与 Linux的目录结构 一、Linux文件系统的树形结构
Unix指令4-文字編輯與程式撰寫.
Develop and Build Drives by Visual C++ IDE
Presentation transcript:

Building Embedded Linux(1)

Outline Introduction 開發系統 S3C2410X介紹 NAND & NOR FLASH 開發環境

Introduction

Introduction Building Embedded Linux System五步驟 必須先建立開發系統 確認目標板 建構開發環境 Building Embedded Linux for Target 燒寫至儲存裝置

建立開發系統 開發Embedded Linux,首先要在個人電腦上建立標準版Linux,以標準Linux 做為開發Embedded Linux的本機端(Host),而被開發的稱為目標板(Target)。 Linux Embedded Linux

確認目標板 現今的嵌入式開發板眾多,較為廣泛使用包括Xscale、ARM、MIPS及PPC等不同微處理器組合而成的嵌入式開發板,因此在開發前必須先確認目標板。

建構開發環境 在開發Embedded Linux的過程中,必須要編譯、組譯及連結等動作,所以本機端(Host)需要有Cross-Toolchain。

Cross-Toolchain 跨平台工具鏈,包括Binutils、GCC及Glibc,是跨平台開發時所需要使用到的工具。 而這些工具卻是相輔相成的,又因為這些工具無法單獨執行跨平台開發,表面上看來這些工具就像是一串互相連結的鏈,所以才會通稱為跨平台工具鏈。

Building Embedded Linux for Target 建立一個基於Linux Kernel所產生的Embedded Linux,並不限定要用哪些工具及套件。 但基本上會包含 Bootloader Linux Kernel UNIX utilities Native Library GUI Library (Option)

燒寫至儲存裝置 將已經完成跨平台編譯的Bootloader、Linux Kernel及Root filesystem分別各自燒寫至目標板上的儲存裝置,通常是使用Flash。

Building Embedded Linux System 必須先建立開發系統 確認目標板 建構開發環境 Building Embedded Linux for Target 燒寫至儲存裝置

開發系統 開發系統通常不限定是何種Linux 發行套件,像是Mandrake、SuSE、Red Hat或Fedora。在此是用Fedora 1開發。若對開發過程所需用的套件不清楚,建議直接完全安裝。(安裝過程省略)

Building Embedded Linux System 必須先建立開發系統 確認目標板 建構開發環境 Building Embedded Linux for Target 燒寫至儲存裝置

確認目標板 選用的目標板是凱思嵌入式系統開發網所代理的SBC-2410開發板。 出處:http://www.kaise.com.tw/

確認目標板 SBC-2410開發板,會選用作目標板的原因,體積小(120mmx90mm) 、採用ARM920T Core、有64MB Nand Flash儲存空間。下頁有詳細列表。

SBC-2410 Samsung S3C2410X ARM920T 32-bit CPU (200MHz) 64Mbytes NAND Flash 1Mbytes NOR Flash 64MB SDRAM(133MHz) RS-232C port x1 USB Host x1 USB Slave x1 RJ-45 10M Base-T Ethernet interface

SBC-2410 Button x4 and Reset Button x1 Led x4 SD card connector LCD port Keyboard Port Other RS-232C port 可額外接出 JTAG connector 20Pin Board size 120mmx90mm

S3C2410X SAMSUNG所製造的一顆16/32 bit RISC Microprocessor,並採用ARM920T Core,價格低廉、低功率及高效能的特性。

FEATURES Architecture Enhanced ARM architecture MMU to support WinCE, EPOC 32 and Linux ARM920T CPU core supports the ARM debug architecture. Internal Advanced Microcontroller Bus Architecture (AMBA) (AMBA2.0, AHB/APB)

FEATURES System Manager Little/Big Endian support Address space: 128M bytes for each bank (total 1G bytes) Supports external wait signals to expend the bus cycle Supports self-refresh mode in SDRAM for powerdown

FEATURES NAND Flash Boot Loader Supports booting from NAND flash memory 4KB internal buffer for booting Supports storage memory for NAND flash memory after booting

FEATURES Cache Memory 64-way set-associative cache with I-Cache (16KB) and D-Cache (16KB) 8words length per line with one valid bit and two dirty bits per line Write-through or write-back cache operation to update the main memory

NAND-Flash & NOR-Flash NOR-Flash和NAND-Flash是現在市場上兩種主要的快閃記憶體技術 Intel於1988年開發出NOR flash技術。 隔年,1989年東芝公司發表了NAND flash結構。

NAND-Flash & NOR-Flash NOR Flash在執行抹除時,必須把目標區塊內所有位元都設為0。而NAND-Flash抹除操作較為簡單。 抹除NOR Flash是以64~128KB區塊進行,執行一個寫入/抹除的操作時間大約為5S。而NAND Flash是以8~32KB區塊進行,同樣動作執行時間最多只需4ms。

NAND-Flash & NOR-Flash差異 NAND Flash使用複雜的I/O存取資料,NOR Flash容易存取任何一個位元組。 NAND Flash比較便宜。 NAND Flash每區塊最大抹寫次數一百萬次,NOR Flash為十萬次。      

NAND-Flash & NOR-Flash 由上列幾點可得知NOR-Flash適合較少抹寫動作的資料存放,又常使用。所以通常NOR-Flash存放Bootloader。而NAND Flash放Root filesystem。

Building Embedded Linux System 必須先建立開發系統 確認目標板 建構開發環境 Building Embedded Linux for Target 燒寫至儲存裝置

建構開發環境 在建構Embedded Linux之前,必須先設定好開發環璄,即是設置Cross-toolchain,當設置完之後,就可以進行Cross Compile及根檔案目錄的建置。

Cross Compile 跨平台編譯實際上跟正常編譯流程相同,只需把編譯時所需的工具更改即可。

Cross-Toolchain 在這裡使用的套件有以下 : GNU Compiler Collection (gcc2.95.3) GNU C Library (glibc2.1.3) GNU Binutils (binutils2.10.1) Linux Kernel 2.4

Cross-Toolchain 對各種目標板進行應用程式的跨平台編譯 跨平台編譯所需二元公用程式的組合,包括Binutils、Glibc、GCC。

GNU Compiler Collection(gcc) GNU Compiler Collection是數個編譯器的集合, 裡頭包含C, C++, Java, Fortran, and Ada等。

GNU Compiler Collection(gcc) 硬體包括x86, ia64, alpha, hppa, m68k, Power PC, mips, IBM rs6000, sparc/sparc64等。 作業系統包含Microsoft 平台 到UNIX和IBM的 OS/2

GNU Compiler Collection(gcc) 其中很重要的是CPP,它是在編譯時期的前置處理器。 大部份會使用C/C++ compiler,在跨平台編譯的過程中,是用來編譯成組合語言。

GNU Binary Utilities(binutils) 用來操作二元目的檔 (binary object file)。程式經由編譯器(如gcc)編譯後,還得經由組譯、連結等動作,才能產生出機械語言。 Binutils裡頭就包含了組譯、連結等工具。

GNU Binary Utilities(binutils) 主要包括二支公用程式 assembler,linker其餘的有ar、ld 、gasp、ar、nm、objcopy、objdump、ranlib、readelf、size、strings、strip、c++filt及addr2line。

GNU Binary Utilities(binutils) as (assembler) 組譯器,當程式經過編譯器後,輸出的是組合語言,還需要經過組譯器把組合語言轉換成機械語言,通常輸出結果為目的檔(object file)。 ld (Linker) 連結器,把一隻程式所有的目的檔及其所需要的系統函式庫都連結起來,才會產生出一個完整可執行的程式檔。

GNU Binary Utilities(binutils) 建立,操作靜態函式庫的內容,即是把原始碼編譯成目的檔時,把這些目的檔打包成一個靜態函式庫。 Addr2line 把內含除錯資訊的 程式中某個特定位址轉換成為原始碼的檔名以及其行號。

GNU Binary Utilities(binutils) c++filt 它可以由組合標記反向對應出其原來的函式名稱,以便連結 器參考使用,而此反向過程即稱之為 demangling。 nlmconv 此工具程式可以將目的檔轉換成 NLM (NetWare Loadable Module) 的格式。

GNU Binary Utilities(binutils) gprof 用來顯示程式的效率測試資訊 (profiling)。通常在我們要試圖提升程式的 執行效能時,我們必須要先知道程式的各部分到底花了多少時間來執行。 nm 此工具程式可以列出目的檔或函式庫中內含的物件名稱,包括所有的函式名稱與 全域變數的名稱 .... 等。

GNU Binary Utilities(binutils) objcopy 此工具程式可以拷備、轉換不同格式的目的檔。 objdump 此工具程式可以列出目的檔內含的資訊。

GNU Binary Utilities(binutils) ranlib 此工具程式可以產生包裹檔的內容索引,並加入該包裹檔中。此包裹檔即為 ar 程式所產生的包裹檔。通常產生靜態函式庫時需要用到它。 readelf 此工具程式可以顯示 ELF 格式的目的檔內含的資訊。

GNU Binary Utilities(binutils) size 此工具程式可以列出目的檔或包裹檔中各節區的大小。 strings 此工具程式可以列出檔案中任何可印出的字串。 strip 此工具程式可以將目的檔或可執行檔中不必要的標記與資訊抽離,讓該目的 檔或可執行檔的大小縮小。通常是除錯資訊及其他符號標記。

GNU C Library (glibc) 凡是Unix族系的作業系統皆需要一個c函式庫, 在Embedded Linux中也不例外,通常也意指Native Library。 在此函式庫中定義了和System calls溝通的介面 , 和其它基本的功能像是open, malloc, printf, exit... 等等

GNU C Library (glibc) 西元1995年前GNU/Linux系統並不支援共享函式庫,當時應用程式都以靜態連結的方式。1995-1996年libc5問世,系統開始支援ELF可分享函式庫。

GNU C Library (glibc) Libc5問世後一兩年,GNU所開發的glibc做成C函式庫,此時glibc即為系統函式庫。比起libc5,glibc符合許多標準及規範。 ISO C POSIX Berkeley Unix SVID XPG

Cross-Toolchain 取得方式: 網路取得 (handhelds.org) 廠商提供 (開發板供應商) 自己制作 (不詳細介紹) 已編譯完成 廠商提供 (開發板供應商) 自己制作 (不詳細介紹) 需下載binutils、glibc、gcc等套件,並考慮其版本相依性。

Cross-Toolchain 網路取得 (handhelds.org) 註:解完後所放的位置是一定的,但必須依照原本 編譯時所存放的位置。 www.handhelds.org/網站可取得cross-toolchain(ARM) 下載完後,使用下列步驟 : tar jxvf toolchain_name.tar.bz2 解完後放於/usr/local/arm/ export PATH=$PATH:/usr/local/arm/3.4.1/bin/ 設置完後即可使用toolchain。 註:解完後所放的位置是一定的,但必須依照原本 編譯時所存放的位置。 Toolchain網路位置: http://www.handhelds.org/download/projects/toolchain/

Cross-Toolchain 廠商提供 同樣解開壓縮檔後,放於其指定的位置,因為相同是已編譯完成的跨平台工具鏈,所以要放在其編譯時期相同的位置。 設置 export PATH=$PATH:/toolchain位置/bin/ 設置完後即完成環境設置。

Cross-Toolchain 自己制作 必須至GNU網站下載GCC、Binutil及Glibc。 分別各自安裝,但互相會有相依性。 建立完成後,設置PATH Export PATH=$PATH:/toolchain路徑/bin PATH設置成功後,即可進行跨平台編譯。

Building Cross-Toolchain 設置核心標頭檔 (kernel header) 建立公用程式 (binutils) C編譯器的規劃 (C compile) 程式庫的規劃 (Glibc) 規模完整編譯器 (C / C++ compile) *一共包含 ar as gcc lib 等。

Building Cross-Toolchain 假設使用者為baw,建立編譯Cross-Toolchain所需要用到的目錄。 # mkdir -p /home/baw/Embedded_Linux_arm/Embedded_Project/tools/arm-linux 這樣將會循序地把沒有存在的目錄建立起來。 # ls /home/baw/Embedded_Linux_arm/Embedded_Project/tools/arm-linux 這樣即可知道是否已經建立起來,若沒有,會告知其目錄不存在。

Building Cross-Toolchain 設置編譯Cross-Toolchain的環境變數,將其寫於一個命令稿devel_cross PROJECT:表示此Project名稱 PRJROOT:表示編譯跨平台工具的根目錄 TARGET:表示目標板 PREFIX:表示安裝目錄 TARGET_PREFIX:表示因目標板改變的目錄 PATH:表示其環境變數

Building Cross-Toolchain 然後執行# . devel_cross,表示設環境變數 測試是否設定成功,如成功即會至指定目錄

Building Cross-Toolchain 設置Cross-toolchain各種套件原始碼放置位置於 $PRJROOT/build-source/ # mkdir $PRJROOT/build-source 下載各需要用到的套件至此目錄。 ftp://ftp.gnu.org/gnu/ 可下載 下載binutils、gcc、glibc和glibc-linuxthreads

Building Cross-Toolchain 接下來建立各套件所擺放位置,一共要建立Binutils、glibc、boot-gcc(中介編譯)及gcc #mkdir $PRJROOT/build-source/Binutils #mkdir $PRJROOT/build-source/Boot-Gcc #mkdir $PRJROOT/build-source/Glibc #mkdir $PRJROOT/build-source/Gcc

設置核心標頭檔 設置核心標頭檔,通常在Glibc編譯期間會用到核心標頭檔,但在此先設置。 下載核心原始碼。 至http://www.kernel.org下載核心,但需要適合在目標板所使用的核心版本。 在此下載Linux Kernel-2.4.18 建立於工作目錄的kernel目錄。 # mkdir $PRJROOT/kernel 把剛才下載的Kernel壓縮檔解壓縮,並放於目錄。 # tar zxvf linux-2.4.18.tar.gz –C $PRJROOT/kernel/

設置核心標頭檔 更改kernel名稱 至kernel目錄 進行kernel組態 # cd $PRJROOT/kernel/ # mv linux linux-2.4.18 至kernel目錄 # cd $PRJROOT/kernel/linux-2.4.18 進行kernel組態 # make ARCH=arm CROSS_COMPILE=arm-linux- menuconfig 進入組態畫面,需要選擇處理器及系統類型。 # make ARCH=arm CROSS_COMPILE=arm-linux- dep

設置核心標頭檔 組態畫面

設置核心標頭檔 建立核心標頭檔目錄 開始複製核心標頭檔 # mkdir $TARGET_PREFIX/include # cp –r include/linux/ $TARGET_PREFIX/include # cp –r include/asm-i386/ $TARGET_PREFIX/include/asm # cp –r include/asm-generic/ $TARGET_PREFIX/include

Building binutils 解開原始碼,並解於工作目錄。 進入預設binutils工作目錄,並組態並安裝。 # cd $PRJROOT/build-source # tar zxvf binutils-2.10.1.tar.gz 進入預設binutils工作目錄,並組態並安裝。 # cd Binutils # ../binutils-2.10.1/configure --target=$TARGET --prefix=$PREFIX # make # make install

Building binutils 組態畫面

Building binutils 當安裝成功後,在安裝目錄夾裡會有下列檔案。 安裝目錄夾為 $PREFIX/bin 一共有以下檔案: arm-linux-addr2line arm-linux-ar arm-linux-as arm-linux-c++filt arm-linux-gasp arm-linux-ld arm-linux-nm arm-linux-objcopy arm-linux-objdump arm-linux-ramlib arm-linux-readelf arm-linux-size arm-linux-strings arm-linux-strip

Building C compiler 首先一樣解壓縮gcc套件。 進入gcc預設工作目錄,並組態。 # cd $PRJROOT/build-tools # tar zxvf gcc-2.95.1.tar.gz 進入gcc預設工作目錄,並組態。 # cd Boot-Gcc/ # ../gcc-2.95.1/configure --target=$TARGET --prefix=$PREFIX --without-headers --with-newlib --enable-languages=c --without-headers 不使用標頭檔 --with-newlib 不使用glibc --enable-languages-c 只編譯C編譯器

Building C compiler Configure之後會產生其適當的Makefile,所以再來建立編譯器 # make all-gcc 編譯完成後,再接著安裝gcc # make install-gcc 可在$PREFIX/bin 裡頭查看是否有C Compiler。

Building Glibc 解開Glibc套件: 並再解開linuxthread套件: 移至glibc預訂工作目錄。 # cd $PRJROOT/build-source # tar zxvf glibc-2.2.3.tar.gz 並再解開linuxthread套件: # tar zxvf glibc-linuxthreads-2.2.3.tar.gz -C glibc-2.2.3/ 移至glibc預訂工作目錄。 # cd Glibc/

Building Glibc 開始建立C函式庫。 編譯glibc 安裝glibc # CC=arm-linux-gcc ../glibc-2.2.3/configure --host=$TARGET --prefix=“/usr --enable-add-ons --with-headers=$TARGET_PREFIX/include 編譯glibc # make 安裝glibc # make install_root=$TARGET_PREFIX prefix=“” install

Building C/C++ Compiler 進入預設完整編譯器工作目錄,並組態。 # cd $PRJROOT/build-source/Gcc # ../gcc-2.95.1/configure --target=$TARGET --prefix=$PREFIX --enable-languages=c,c++ 組態完後編譯 # make all 編譯完後安裝 #make install

Building C/C++ Compiler 最後完全編譯成功後,目錄會有下列檔案

Cross-Toolchain $PRJROOT/tools 目錄的內容 bin cross-compile 工具 arm-linux 目標板的檔案 Include cross-compile 工具標頭檔 Info Gcc的info文件 Lib 讓cross-compile 工具使用 的函式庫 Man cross-compile線上文件 Share 無

Cross-Toolchain $PRJROOT/tools/arm-linux 目錄的內容 bin 和glibc有關的目標板二元檔 etc 只包括rpc include 目標板用以建應用程式的標 頭檔 info glibc 的 info lib 目標板使用的函式庫 libexec pt_chown檔 sbin 目標板的/sbin

Cross-Toolchain 每種不同版本套件組合成的Cross-Toolchain ,都會遇到不同的問題,最好利用Google搜尋解決法。 最好的方法還是利用已編譯好的Cross-Toolchain,但必須注意的是解壓縮後放置的位置,跟原始編譯的位置相不相同。