1. 簡介
嵌入式系統能夠在開發(fā)板上正常運行,需要先進行系統配置,一個完整的嵌入式系統應該包含的幾個部分::uboot,kernel,rootfs,appfs。這幾部分在ARM板Flash上的位置關系如下圖所示:
嵌入式系統分區(qū)結構
注:圖片來源于韋東山老師的《嵌入式Linux應用開發(fā)完全手冊》
rootfs可以不用添加到開發(fā)板,而是部署到PC機上,開發(fā)板在運行完kernel,要掛載rootfs時,可以通過NFS網絡掛載到設定好的PC機上的文件系統上。
操作系統: 內核 + 文件(應用, 配置, 設備, ...);
bootloader: u-boot (交互界面) # lsX
help
kernel : linux (沒有交互)
filesystem: rootfs android qt_rootfs ...
.... ....
shell
2. 安裝工具
需要用到的安裝工具包及源碼包如下:
2.1 安裝交叉編譯工具
交叉編譯:在PC機(x86平臺)上開發(fā)程序,在ARM板上運行,提高開發(fā)、編譯速度。
在編譯uboot、內核、busybox、程序文件之前需要安裝兼容開發(fā)板的交叉編譯工具
參考Exynos4412交叉編譯環(huán)境搭建
檢測系統是否已經安裝有交叉編譯環(huán)境:
# arm-linux-gcc -v
bash: arm-linux-gcc: command not found
安裝步驟:
找到arm-linux-gcc-4.5.1-v6-vfp-20120301.tgz 所在路徑,并解壓壓縮文件
# tar xf arm-linux-gcc-4.5.1-v6-vfp-20120301.tgz
# ls
arm-linux-gcc-4.5.1-v6-vfp-20120301.tgz opt
// 解壓后得到一個opt文件夾
在usr/local/目錄下創(chuàng)建文件夾,并將解壓縮的文件夾./opt/FriendlyARM/toolschain/4.5.1/拷貝到/usr/local/arm/目錄:
# mkdir /usr/local/arm
# cp opt/FriendlyARM/toolschain/4.5.1/ /usr/local/arm/ -rf
修改環(huán)境變量:
# vim /root/.bash_profile
// 在文件末尾添加:
PATH=/usr/local/arm/4.5.1/bin/:$PATH
export PATH
注銷用戶,重新登錄用戶后生效
或者:
# source /root/.bash_profile
// 使配置文件生效
檢查交叉編譯環(huán)境是否安裝成功:
# arm-linux-gcc -v
......
gcc version 4.5.1 (ctng-1.8.1-FA)
// 交叉編譯環(huán)境安裝成功
檢測到交叉編譯環(huán)境版本為4.5.1,安裝成功。
2.2 Minicom串口工具安裝及配置
參考Minicom串口工具安裝及配置
2.3 安裝fastboot工具
2.4 安裝NFS服務
現在多數Linux發(fā)行版都會自帶NFS服務,一般系統安裝時都會默認安裝NFS服務,如果沒有安裝請查詢資料自行安裝,此處不再敘述NFS安裝方法。
2.5 關閉防火墻
使用NFS網絡文件系統需要系統關閉防火墻,否則,系統啟動過程會失敗。
4. 編譯內核
Tiny4412編譯內核linux-3.5后,將zImage燒寫到SD卡中,啟動過程中會出現卡死的現象
在kernel編譯的時候將TrustZone模塊去掉,之后再編譯,再燒寫
5. 編譯uboot并制作SD卡
參考Tiny4412光盤資料README for FriendlyARM Tiny4412
5.1 Build uboot
a) 安裝好toolchain
(arm-linux-gcc-4.5.1-v6-vfp-20120301.tgz)
并設置好環(huán)境變量PATH,保證可以正常使用。
b) 解壓 uboot_tiny4412-20130929.tgz 并進入相應的目錄
# tar xzf uboot_tiny4412-20130929.tgz
# ls
uboot_tiny4412_0929 uboot_tiny4412-20130929.tgz
c) 配置 uboot 并編譯
# cd uboot_tiny4412
# make tiny4412_config
# make
d) 編譯 用于生成bl2 的工具
# make -C sd_fuse
或者
# cd sd_fuse; make
5.2 制作啟動 Tiny4412 的SD卡
a) 先準備一張4G或以上的SDHC卡
注意:該卡的已有數據將會被破壞,因此請先對SD卡上的數據進行備份。
b) 如果SD卡容量大于等于32G
# cd uboot_tiny4412_0929/sd_fuse/tiny4412
# vim sd_fusing.sh
36 if [ ${BDEV_SIZE} -gt 32000000 ]; then
37 echo "Error: Block device size (${BDEV_SIZE}) is too large"
38 # exit 1
39 fi
將判斷SD卡容量中的處理exit 1注釋掉。
c) fusing SD card
# 假設SD卡已被PC Linux識別為/dev/sdb, 以root用戶運行以下命令即可:
# cd sd_fuse/tiny4412
# ./sd_fusing.sh /dev/sdb
5.3 使用SD卡啟動 Tiny4412
a) 將已經制作好的SD卡插到Tiny4412板上,撥動S2切換到SDBOOT,同時連接串口線到PC且假設已經準備好。
b) 開發(fā)板加電,然后在串口控制臺(如:Minicom),按任意鍵進入uboot命令行模式
c) 對SD卡進行分區(qū)
輸入以下uboot命令即可對SD卡進行分區(qū):
# fdisk -c 0 320 806 518
重新分區(qū)后,可重新格式化FAT分區(qū)
# fatformat mmc 0:1
5.4 使用fastboot工具燒寫內核
a) 進入fastboot模式以燒寫內核鏡像
使用USB線連接Tiny4412的MICRO_USB口到PC,然后輸入以下uboot命令:
# fastboot
b) 燒寫內核鏡像到SD卡
首先準備好的內核鏡像zImage,進入zImage所在的文件夾
在PC端輸入以下命令進行燒寫:
# fastboot flash kernel zImage (燒寫kernel)
6. 制作簡單的網絡文件系統
6.2 NFS服務配置
6.3 使用busybox編譯出命令
解壓縮:
# tar xf busybox-1.17.2-20101120.tgz (linux基本命令)
# cd busybox-1.17.2
編輯:
配置:
make defconfig (默認)
make menuconfig (修改默認配置)
Busybox Settings --->
-> Build Options
-> (arm-linux-) Cross Compiler prefix
^^^^^^^^^^ 交叉編譯
arm-linux-gcc 指定編譯工具為交叉編譯器;
在busybox中添加命令:rmmod insmod lsmod
Linux Module Utilities --->
[ ] Simplified modutils
[*] insmod
[*] rmmod
[*] lsmod
[*] Pretty output
[*] modprobe
[*] Blacklist support
[*] depmod
make
make install
或者:
make && make install
^ ^
編譯 安裝(拷貝)
注意: 編譯完時提示; 執(zhí)行程序需要的依賴庫;
Trying libraries: crypt m
Library crypt is not needed, excluding it
Library m is needed, can't exclude it (yet)
安裝完時提示
--------------------------------------------------
You will probably need to make your busybox binary
setuid root to ensure all configured applets will
work properly.
--------------------------------------------------
拷貝安裝完的命令:
cp ./_install/* /nfsroot -rf
到這里去執(zhí)行編譯好的程序,會提示執(zhí)行失敗????
是因為在編譯時,選擇使用動態(tài)鏈接;要解決該問題,需要將交叉編譯工具中的庫文件拷貝到nfsroot/lib目錄下。
6.4 添加庫文件和動態(tài)鏈接加載器
(執(zhí)行命令需要依賴庫)
mkdir /nfsroot/lib
cp /usr/local/arm/4.5.1/arm-none-linux-gnueabi/lib/* /nfsroot/lib -rf
^ arm 架構的庫和加載器
6.5 添加設備文件
(應用運行需要)
mkdir /nfsroot/dev /nfsroot/sys /nfsroot/proc /nfsroot/tmp
mkdir /nfsroot/etc
mkdir /nfsroot/etc/init.d
6.5.1 編輯啟動腳本:
vim /nfsroot/etc/init.d/rcS
#!/bin/sh
//掛載虛擬文件系統:
// proc虛擬文件系統 : ps top
// kernel運行狀況, 進程信息;
/bin/mount -t proc none /proc
// sysfs虛擬文件系統: mdev
// kernel中所有的支持的設備信息;
/bin/mount -t sysfs none /sys
// tmpfs虛擬文件系統:
// 斷電清空數據/dev /tmp
/bin/mount -t tmpfs none /dev
// ^^^^
///dev實時描述當前kernel中支持的所有設備的節(jié)點;
// tmpfs同上;
/bin/mount -t tmpfs none /tmp
//mdev -s : 掃描/sys目錄, 在/dev目錄下生成設備節(jié)點;
//busybox中有mdev, x86下沒有;
/sbin/mdev -s
//支持熱插拔; 需要kernel監(jiān)聽設備的插入拔出并調用/sbin/mdev命令;
echo /sbin/mdev > /proc/sys/kernel/hotplug
設置腳本的執(zhí)行權限:
chmod 777 rcS
6.5.2 編輯init進程啟動配置文件:
vim /nfsroot/etc/inittab
系統啟動自動執(zhí)行腳本:
::sysinit:/etc/init.d/rcS (系統啟動時執(zhí)行)
執(zhí)行完腳本,執(zhí)行shell, 指定shell輸入輸出終端ttySAC0:
ttySAC0::respawn:/bin/sh (任何時候都執(zhí)行)
注意: 不需要添加inittab;
ramdisk-u.img --> inittab --> rcS
^ 根文件系統;
上一篇:Qemu搭建ARM vexpress開發(fā)環(huán)境(一)
下一篇:Exynos4412交叉編譯環(huán)境搭建
推薦閱讀
史海拾趣
隨著公司的發(fā)展,Falco Electronics開始積極拓展市場。公司不僅在國內市場取得了顯著成績,還積極開拓國際市場。同時,Falco Electronics還與其他行業(yè)領軍企業(yè)開展戰(zhàn)略合作,共同開發(fā)新產品、拓展新市場。這些合作不僅為公司帶來了更多的商機,也提升了公司在行業(yè)內的地位和影響力。
馳芯微公司自2014年成立以來,就立志于打破國外芯片廠商在車規(guī)級芯片領域的壟斷。初創(chuàng)時期,公司面臨著資金短缺、技術壁壘高和市場競爭激烈的挑戰(zhàn)。然而,馳芯微團隊憑借對技術的執(zhí)著追求和對市場的敏銳洞察,成功研發(fā)出了一系列車規(guī)級智能傳感和控制芯片,并逐漸在行業(yè)中嶄露頭角。經過數年的努力,馳芯微已經成為國內車規(guī)級芯片領域的領軍者,其產品廣泛應用于各類前裝量產車型。
進入XXXX年代,隨著電子技術的飛速發(fā)展,Elytone公司意識到技術創(chuàng)新是企業(yè)持續(xù)發(fā)展的關鍵。公司投入大量資金引進先進設備和研發(fā)人才,成功開發(fā)出一系列具有競爭力的電子產品。這些產品在市場上獲得了良好的口碑,為公司的快速發(fā)展奠定了堅實基礎。
2017年,電子行業(yè)迎來了一場引人矚目的收購案。新思科技(Synaptics),一家在人機界面交互開發(fā)解決方案領域具有領導地位的公司,宣布以3.95億美元現金和726,666只普通股收購科勝訊系統公司(Conexant Systems)。這一收購行動不僅增強了Synaptics在智能家居領域的語音和音頻處理解決方案的能力,也標志著Conexant正式成為Synaptics大家庭的一員。通過此次收購,兩家公司實現了技術資源和市場優(yōu)勢的互補,共同開啟了新的發(fā)展篇章。
作為一家在半導體和通信領域具有深厚技術底蘊的公司,Conexant始終致力于技術創(chuàng)新和市場拓展。在不斷變化的市場環(huán)境中,Conexant緊跟行業(yè)趨勢,加大在新技術研發(fā)和市場推廣方面的投入。通過持續(xù)創(chuàng)新和市場拓展,Conexant成功鞏固了在行業(yè)內的領先地位,并為全球用戶提供了更加優(yōu)質的產品和服務。
這些故事只是CONEXANT公司在電子行業(yè)發(fā)展中的一部分,它們展示了公司在不同時期的戰(zhàn)略決策、技術創(chuàng)新和市場拓展能力。這些成就不僅為CONEXANT公司贏得了業(yè)界的尊重和認可,也為整個電子行業(yè)的發(fā)展做出了重要貢獻。
隨著產品技術的不斷成熟,Dean Technology公司開始注重品牌建設和市場推廣。他們積極參加各類電子展會,展示公司的最新產品和技術,與行業(yè)內外的客戶建立聯系。同時,公司還通過廣告宣傳、合作伙伴關系等方式,提高品牌知名度和美譽度。這些努力使得Dean Technology的高壓二極管產品逐漸在市場上獲得了認可。
按鍵掃描是每個搞單片機的都會遇到的問題,也是一個開發(fā)人員必須具備的基本功。先從最基本的說起。在此聲明,沒有代碼,也不要向我要代碼,也不想穿褲子,如果你看了帖子還寫不出代碼,那么我只能說你太笨了。。。。。。。。還是那句話,搞開發(fā)重要 ...… 查看全部問答∨ |
|
要求2006年7月1日開始,電子電氣設備中禁止使用鉛、汞、六價鉻、鎘和多溴聯苯(PBB)、多溴二苯醚(PBDE);其中鎘限量指標 100PPm(0.01%),另五種限量l000ppm(0.1%)。企業(yè)出口歐盟的產品都需符合以上的限量要求,并且要展示相應的證明文件, ...… 查看全部問答∨ |
我想變成程序,但不知道要多少錢,請高手個價位 儀器的功能大概如下;1,壓力傳感器測得壓力顯示在數碼管上,另外可以對通過對標定對傳感器進行微調 &nbs ...… 查看全部問答∨ |
我做的是PCI的驅動,用VC6 DDK來實現。板卡橋芯片用的是9052做的驅動中設置中斷可是沒有反應這是為什么呢?將9052的 LINTi1接了個開關,模擬實現中斷的電平輸入。相關程序如下: //獲取中斷資源 case CmResourceTypeInterrupt: &n ...… 查看全部問答∨ |
|
我想用nGCS2作片選,LDADDR0-LDADDR7作地址線,LDDATA0-LDDATA7作數據線進行CPLD的讀寫數據.于是我定義了下面的結構體: #define NGCS2_BASE 0XA4000080 #define NGCS2_PHY_BASE 0x10000080 ///定義CPLD控制寄存器地 ...… 查看全部問答∨ |
我下載了WTL80,發(fā)現該目錄下有個文件夾“AppWizCE”,要怎樣才能使EVC下能夠通過AppWizard來創(chuàng)建ATL/WTL個工程呢? 如果不能通過AppWizard來創(chuàng)建,evc下如何建立ATL/WTL的exe工程?… 查看全部問答∨ |
我將bin目錄下的exe文件和sdf數據庫文件復制到wince設備上,運行exe文件就報異常。 異常信息: Error SmartDevice.exe MissingMethodException File or assembly name \'System.Data.SqlServerCe, Version=3.5.1.0, Culture=neutral, PublicKe ...… 查看全部問答∨ |
Cortex-M3和Cortex-M0的區(qū)別 ARM架構自v6開始分為A/R/M三個系列。CM0/CM3都是屬于M系列的。CortexM0是基于v6架構;CortexM3是v7架構。主要區(qū)別 性能: Cortex-M0 基于32 位架構,利用一個 通過MULS 指令直接與內核相連的3 ...… 查看全部問答∨ |