去年一月份做的筆記,一直沒有發表,現在在找工作,才發覺自己的工作習慣不太好,筆記的話最好還是能夠發出來,大家一起閱讀,交流這樣才能提升的快些,在這裏很是感謝那些在CSDN,51CTO,和cnblog裏分享自己成果的大牛們。學習的很多東西都是在這些大牛的啓發下學習,並掌握的。我也會陸陸續續地把自己工作中用到的知識點分門別類地整理出來,給後來者提供一些方便。關鍵點都已標出,若還有不解之處,歡迎留言,大家討論。
1)將光盤 Linux 目錄中的 arm-linux-gcc-4.5.1-v6-vfp-20120301.tgz 複製到 /opt/tmp
#sudo cp /mnt/hgfs/ubuntu_window/arm-linux-gcc-4.5.1-v6-vfp-20120301.tgz /opt/tmp
ubuntu_window 爲共享文件夾
#tar xvzf arm-linux-gcc-4.5.1-v6-vfp-20120301.tgz –C /
注意: C 後面有個空格,並且 C 是大寫的,它是英文單詞“ Change”的第一個字母,在此
是改變目錄的意思。執行該命令,將把 arm-linux-gcc 安裝 /opt/FriendlyARM/toolschain/4.5.1目錄。
2)
把編譯器路徑加入系統環境變量,運行命令#gedit /root/.bashrc編輯
/root/.bashrc 文件, 注意“ bashrc ”前面有一個“ . ”,修改最後一行爲export
PATH=$PATH:/opt/FriendlyARM/toolschain/4.5.1/bin,注意路徑一定要寫對,否則將不會有效。如圖,保存退出。
export PATH=$PATH:/opt/FriendlyARM/toolschain/4.5.1/bin
重啓,或者註銷。使以上設置生效,在命令行輸入arm-linux-gcc –v,會出現如下信息,這說明交叉編譯環境已經成功安裝。
3)解壓安裝源代碼及其他工具
解壓安裝開發學習過程所用到的全部源代碼以及其他一些小工具,這包括:
- Linux 內核源代碼
- Qtopia-2.2.0 平臺源代碼(分爲 x86 和 arm 平臺兩個版本)
- arm-qt-extended-4.4.3 平臺源代碼(也就是 Qtopia4, 分爲 x86 和 arm 兩個版本)
- QtE-4.8.5 平臺源代碼(arm 版本)
- busybox-1.17 源代碼
-
Linux 編程示例源代碼
-
目標文件系統目 錄
-
目標文件系統映象製作工具(包括 yaffs2 和 UBIFS)
- 圖形界面的
Linux logo 製作工具 logomaker
注意:所有的源代碼和工具都是通過解壓方式安裝的,所有的源代碼均使用統一的編譯器
arm-linux-gcc-4.5.1 編譯
A)解壓安裝源代碼
首先創建工作目錄/opt/FriendlyARM/mini210/linux
在命令行執行#mkdir –p /opt/FriendlyARM/mini210/linux
後面步驟的所有源代碼都會解壓安裝到此目錄中:
(1)準備好Linux
源代碼包
在Ubuntu系統中/tmp 目錄中創建一個臨時目錄/tmp/linux
#mkdir /tmp/linux
把光盤中
linux 目錄中的所有文件都複製到/tmp/linux 目錄中
sudo cp -r /mnt/hgfs/ubuntu_window/* /tmp/linux
說明:
這樣做是爲了統一下面的操作步驟,其實你可以使用其他目錄,也可以直接從光盤解壓安裝。
(2)解壓安裝Linux內核源代碼
在工作目錄/opt/FriendlyARM/mini210/linux 中執行:
#cd /opt/FriendlyARM/mini210/linux
#sudo
tar xvzf /tmp/linux/linux-3.0.8-20141105.tgz
將創建生成 linux-3.0.8
目錄,裏面包含了完整的內核源代碼
說明:
20141105 是我們的發行更新日期標誌,請以光盤中實際日期尾綴爲準。
(3)解壓安裝目標文件系統
執行以下命令:
#cd /opt/FriendlyARM/mini210/linux
#sudo tar xvzf /tmp/linux/rootfs_qtopia_qt4-20141212.tgz
將創建生成 rootfs_qtopia_qt4
目錄
說明:
20141212 是我們的發行更新日期標誌,請以光盤中實際日期尾綴爲準。
(4)解壓安裝嵌入式圖形系統qtopia
源代碼
在工作目錄/opt/FriendlyARM/mini210/linux 中執行:
#cd /opt/FriendlyARM/mini210/linux
#tar
xvzf /tmp/linux/x86-qtopia-20100420.tar.gz
#tar
xvzf /tmp/linux/arm-qtopia-20101105.tar.gz
將創建
x86-qtopia 和 arm-qtopia 兩個目錄,並內含相應的全部源代碼。
說明:
x86-qtopia 和 arm-qtopia 後面或許會有日期尾綴, 它是我們的發行或更新日期標誌,請以光盤中實際日期尾綴爲準。 源代碼包中也包含了嵌入式瀏覽器 konquor 的源代碼。
(5)解壓安裝嵌入式圖形系統qt-extended-4.4.3
源代碼在工作目錄/opt/FriendlyARM/mini210/linux 中執行:
#cd /opt/FriendlyARM/mini210/linux#tar
xvzf /tmp/linux/x86-qt-extended-4.4.3-20101003.tgz
#tar
xvzf /tmp/linux/arm-qt-extended-4.4.3-20101105.tgz
將創建
x86-qt-extended-4.4.3 和 arm-qt-extended-4.4.3 兩個目錄,並內含相應的全部源代碼。
說明:
x86-qt-extended-4.4.3 和 arm-qt-extended-4.4.3 後面或許會有日期尾綴, 它是我們的發行或更新日期標誌,請以光盤中實際日期尾綴爲準。
(6)解壓安裝QtE-4.8.5
源代碼
在工作目錄/opt/FriendlyARM/mini210/linux 中執行:
#cd /opt/FriendlyARM/mini210/linux
#tar
xvzf /tmp/linux/arm-qte-4.8.5-20131207.tar.gz
(7)解壓安裝busybox
源代碼
Busybox 是一個輕型的 linux 命令工具集,在此使用的是 busybox-1.13.3 版本。用戶可以從其官方網站下載最新版本(http://www.busybox.net)。
在工作目錄/opt/FriendlyARM/mini210/linux
中執行:
#cd
/opt/FriendlyARM/mini210/linux
#tar
xvzf /tmp/linux/busybox-1.17.2-20101120.tgz
將創建
busybox-1.17.2 目錄,內含相應版本的全部源代碼。
說明:
爲了方便用戶編譯使用,我們做了一個缺省的配置文件 fa.config。
(8)解壓安裝Linux
示例程序執行以下命令:
#cd /opt/FriendlyARM/mini210/linux
#tar
xvzf /tmp/linux/examples-mini210-20120912.tgz
將創建
examples 目錄,幷包含初學 linux 編程代碼示例。
說明:
20120912 是我們的發行更新日期標誌,請以光盤中實際日期尾綴爲準。 examples 目錄中的代碼均爲友善之臂自主開發,並全部以源代碼方式提供,它們都是一些基於命令行的小程序。
B)解壓創建目標文件系統
執行以下命令:
#cd /opt/FriendlyARM/mini210/linux
#tar xvzf /tmp/linux/rootfs_qtopia_qt4-20141212.tgz
將創建 rootfs_qtopia_qt4 目錄,該目錄和目標板上使用的文件系統內容是完全一致的。
說明:該文件系統包含了前面你所看到的
qtopia-2.2.0, Qtopia4 和 QtE-4.8.5 測試軟件等, busybox,還有常用的命令行工具等
C)解壓創建文件系統映像工具
要把目標文件系統全部寫入開發板中,一般還需要先把目標文件系統目錄製作成單個的映像文件以便燒寫或者複製, Linux內核啓動時,一般會根據命令行參數掛在不同格式的系統,比如 yaffs2, ubifs, ext2 等。在此需要使用mkyaffs2image-128M
和mkyaffs2image-mlc2
這兩個工具。
mkyaffs2image-128M 工具適用於 SLC NAND flash,而mkyaffs2image-mlc2
工具適用於MLC NAND flash,它們都用來壓制 yaffs2 格式的映像文件。
先將光盤
Android 目錄中的 mktools-YYYYMMDD.tar.gz 文件拷貝到ubuntu 的/tmp 目錄下,執行以下命令安裝 mktools 工具鏈:
#tar xvzf /tmp/mktools-YYYYMMDD.tar.gz –C /(注: YYYYMMDD 替換爲實際的日期)將會在/usr/sbin目錄下創建生成相應的工具集。
注意: C 是大寫的, C 後面有個空格, C 是改變解壓安裝目錄的意思說明: 如果你以前安裝過 mini2440 或者 mini6410 使用的 mkyaffs2image 系列工具,它們將會被覆蓋,請不必擔心,它們功能都是相同的。
D)解壓安裝LogoMaker(非必需,可跳過)
LogoMaker 是友善之臂開發的一個 Linux Logo 簡易製作工具,網上有很多資料介紹如何使用命令行的工具把 bmp, jpg, png 等格式的圖片轉換爲 Linux Logo 文件,在此我們設計了一個圖形化的版本,它是基於 Fedora9 開發。執行以下命令:
#tar xvzf /tmp/linux/logomaker.tgz –C /
注意: C 是大寫的, C 後面有個空格, C 是改變解壓安裝目錄的意思說明:執行以上命令, LogoMaker 將會被安裝到/usr/sbin 目錄下,它只有一個文件,安裝完之後在命令行輸入
logomaker 時
提示錯誤./logomaker: error while loading shared libraries: libjpeg.so.62: cannot open shared object file: No such
file or directory 找不到libjpeg的動態鏈接文件。
解決方法:sudo apt-get install libjpeg62-dev
不過在ubuntu下使用會出現生成的圖片爲0字節,爲了解決這個方法先sudo apt-get install netpbm 安裝netpbm。再次使用logomaker還是出現0字節的現象,放棄使用logomaker,
直接使用netpbm的命令行工具。
pngtopnm open_show.png > temp.ppm
ppmquant 224 temp.ppm >temp2.ppm
pnmnoraw temp2.ppm > logo_linux_clut224.ppm
E)配置和編譯內核
Linux 內核與 Android 內核使用的是同一份源碼,但是配置不同,使用以下命令編譯內核。
#cd /opt/FriendlyARM/mini210/linux/linux-3.0.8
#sudo cp mini210_linux_defconfig .config
;注意config
前面有個”.”
#sudo
make menuconfig
你可以執行
make menuconfig 對配置進行修改,修改完成後,輸出 make 進行編譯:
#make最後會在 arch/arm/boot 目錄下生成 zImage,將它替換掉 SD 卡 images/Linux/下的 zImage 燒寫到開發板即可。
lyun@linux:/opt/FriendlyARM/mini210/linux/linux-3.0.8$sudo make menuconfig
HOSTCC scripts/basic/fixdep
HOSTCC scripts/kconfig/conf.o
*** Unable to find the ncurses libraries or the
*** required header files.
*** 'make menuconfig' requires the ncurses libraries.
***
*** Install ncurses (ncurses-devel) and try again.
***
make[1]: *** [scripts/kconfig/dochecklxdialog] 錯誤 1
make: *** [menuconfig] 錯誤 2
安裝
sudo apt-get install libncurses5-dev
正在讀取軟件包列表... 完成
正在分析軟件包的依賴關係樹
正在讀取狀態信息... 完成
將會安裝下列額外的軟件包:
libtinfo-dev
建議安裝的軟件包:
ncurses-doc
下列【新】軟件包將被安裝:
libncurses5-dev libtinfo-dev
升級了 0 個軟件包,新安裝了 2 個軟件包,要卸載 0 個軟件包,有 707 個軟件包未被升級。
需要下載 312 kB 的軟件包。
解壓縮後會消耗掉 1,334 kB 的額外空間。
您希望繼續執行嗎?[Y/n]y
【警告】:下列軟件包不能通過驗證!
libtinfo-dev libncurses5-dev
不經驗證就安裝這些軟件包嗎?[y/N] Y
獲取:1 http://mirrors.163.com/ubuntu/ precise/main libtinfo-dev i386 5.9-4 [93.5 kB]
獲取:2 http://mirrors.163.com/ubuntu/ precise/main libncurses5-dev i386 5.9-4 [218 kB]
下載 312 kB,耗時 1秒 (288 kB/s)
Selecting previously unselected package libtinfo-dev.
(正在讀取數據庫 ... 系統當前共安裝有 144800 個文件和目錄。)
正在解壓縮 libtinfo-dev (從 .../libtinfo-dev_5.9-4_i386.deb) ...
Selecting previously unselected package libncurses5-dev.
正在解壓縮 libncurses5-dev (從 .../libncurses5-dev_5.9-4_i386.deb) ...
正在設置 libtinfo-dev (5.9-4) ...
正在設置 libncurses5-dev (5.9-4) ...
lyun@linux:/opt/FriendlyARM/mini210/linux/linux-3.0.8$ sudo make
[sudo] password for lyun:
make: arm-linux-gcc:命令未找到
CHK include/linux/version.h
CHK include/generated/utsrelease.h
make[1]: “include/generated/mach-types.h”是最新的。
CC kernel/bounds.s
/bin/sh: 1: arm-linux-gcc: not found
make[1]: *** [kernel/bounds.s] 錯誤 127
make: *** [prepare0] 錯誤 2
直接使用root進行make 少很多問題。所以一下操作均在root下執行
解決方法:
1.先打開一個超級用戶權限的shell:
命令:sudo –s
2.在當前shell下,設置環境變量:
命令:gedit /etc/profile
在文件末端加上 export PATH=$PATH:/opt/FriendlyARM/toolschain/4.5.1/bin,並保存。
3. 執行source /etc/profile 這是避免重新啓動ubuntu而又使剛剛修改的環境變量生效的方法。
F)配置和編譯busybox
一般從官方網站下載的 busybox 源代碼,需要根據所需重新配置一下,纔可以編譯使用,我們已經做好了一個缺省的配置文件: fa.config,無論是 2440 和 6410 我們均使用了此配置,通過它編譯出的 busybox 可以滿足絕大部分的需要,進入 busybox 源代碼目錄
/opt/FriendlyARM/mini210/linux/busybox-1.17.2 執行:
#cp fa.config .config
#make
稍等一會,即可在當前目錄編譯生成
busybox 目標文件,它和開發板預裝的是一樣的,一
般 busybox
是不需要更新的。
G)製作目標版文件系統映像
使用 mkyaffs2image-128M 和 mkyaffs2image-mlc2 工具,可以把目標文件系統目錄製作成
yaffs2 格式的映像文件,兩個工具的區別是: mkyaffs2image-128M工具適用於 SLC NAND flash,
而 mkyaffs2image-mlc2 工具適用於 MLC NAND flash。
要將 Linux 文件系統製作成 yaffs2 格式的燒寫文件,輸入以下命令即可:
1) 製作適用於 SLC NAND Flash 的映象文件:
#cd /opt/FriendlyARM/mini210/linux/
#mkyaffs2image-128M rootfs_mini210 rootfs_qtopia_qt4.img
2) 製作適用於 MLC NAND Flash 的映象文件:
#cd /opt/FriendlyARM/mini210/linux/
#mkyaffs2image-mlc2 rootfs_mini210 rootfs_qtopia_qt4-mlc2.img
rootfs_mini210爲實際的文件系統
將生成的 rootfs_qtopia_qt4.img 或 rootfs_qtopia_qt4-mlc2.img 替換掉 SD 卡 images/Linux/ 下的同名文件燒寫到開發板即可。