當然可以。理論上,你只需要在平台中有一個可以跑的編譯器(准確說環境比較合適吧。。),可以把你的代碼翻譯成平台可以運行的格式,那麼就行了。。理論上,你甚至自己可以做一個
「編譯器」,如何在嵌入式系統中,把你的某個代碼,比如:「主函數**列印
¥我愛XXX¥退出」翻譯成你的平台可以執行的格式,然後運行。。。^_^,起碼我是這樣理解的。但是MS還沒有人這樣做。原因可能主要是幾個:1.嵌入式平台的資源有限。2.目前MS在裡面搭一個合適的開發環境,無疑是很痛苦的事情。
⑵ 如何建立Linux交叉編譯環境
最近有很多朋友在探討關於建立Linux交叉編譯環境的問題,下面就一些問題作一個說明,以期拋磚引玉。
基於Linux操作系統的應用開發環境一般是由目標系統硬體(開發板)和宿主PC機所構成。目標硬體開發板用於運行操作系統和系統應用軟體,而目標板所用到的操作系統的內核編譯、應用程序的開發和調試則需要通過宿主PC機來完成(所以稱為交叉編譯)。雙方之間一般通過串口,並口或乙太網介面建立連接關系。
但在此我建議構建如下的交叉編譯環境,適合個人或研發小組使用:單獨拿出一台PC機(PII以上即可,就用以前淘汰的舊機器就可以),在該PC上安裝桌面的Linux操作系統(如Red
Hat
Linux
8.0及以上),可以採用默認的安裝選項(注意要包含FTP服務),這台PC作為Linux伺服器,除管理員以外,一般不直接讓其他人去操作。
將該Linux伺服器接入區域網,並新建一些合法用戶,以便其他的PC機(在此我們將其稱為工作站)的合法用戶能訪問到Linux伺服器。而其他的PC機(工作站)仍然使用Windows操作系統,原來幹啥繼續幹啥。
需要的軟體工具包括:
1、FTP客戶端程序(如Cuteftp,可到網上下載)。
2、Telnet工具(如SecureCRT,可到網上下載)。
3、移植到某一特定ARM平台的Linux操作系統內核源碼(一般由銷售商整理提供)。
4、GNU編譯工具,可由相關網站下載,或由銷售商整理提供。
在工作站安裝:在某工作站PC上安裝FTP客戶端程序和Telnet工具,安裝完畢後應該可以在該工作站PC和Linux伺服器之間進行文件的傳輸,並在工作站PC可以通過Telnet登陸到Linux伺服器(可能需要將Linux伺服器的防火牆服務關閉才能完成)。
在Linux伺服器安裝:將工作站PC上的Linux操作系統內核源碼壓縮包和GNU編譯工具通過FTP傳送到Linux伺服器的某個目錄(如合法的用戶目錄),然後在該目錄下解壓,並將GNU編譯工具安裝到默認的工作目錄即可,以上工作通過在工作站PC使用Telnet工具完成,而不需要在Linux伺服器上進行。
Linux操作系統內核的編譯:Linux操作系統內核的編譯一般有一個比較固定的步驟,會根據MakeFile文件的不同而略有差異,可參考相關文檔,編譯的工作在工作站PC使用Telnet工具完成。
按固定的步驟編譯內核完成以後,會在相應目錄生成可執行的二進制文件,通過FTP將該可執行的二進制文件傳回工作站PC,然會再通過ADS或SDT下的燒寫工具寫入開發板的Flash即可。
(T004)
⑶ 請問linux中是怎樣對應用程序進行交叉編譯的,交叉編譯環境已經搭建好了,就是不知道具體怎麼做
把makefile 里gcc 改成 arm-llinux-gcc ar 改成 arm-linux-ar ,如果有 configure文件 ,./configure --target = arm-linux-
⑷ 如何使Linux在交叉編譯工具安裝配置並立即生效
#tar xvzf arm-linux-gcc-4.3.2.tar.gz -C /
(需要注意的是,在大寫字母後面有一個空格)
第二、利用vi編輯器打開/etc/profile文件,並在下面的位置中添加一句話:pathmunge /opt/FriendlyARM//opt/FriendlyARM/toolschain/4.4.3/bin
(注意:該處的/opt/FriendlyARM//opt/FriendlyARM/toolschain/4.4.3/bin根據各人的交叉編譯工具解壓後所存放的位置而不同)
#vim /etc/profile
# Path manipulation
if [ $EUID = 0 ]; then
pathmunge /sbin
pathmunge /usr/sbin
pathmunge /usr/local/sbin
pathmunge /opt/FriendlyARM//opt/FriendlyARM/toolschain/4.4.3/binfi第三、執行下列的命令即可是剛才的配置生效
#source /etc/profile
最後你就可以檢測自己的交叉編譯環境是否安裝成功。可以輸入下面的命令來檢查:
⑸ 如何在32位linux下進行交叉編譯
1. 下載源文件、補丁和建立編譯的目錄 2. 建立內核頭文件 3. 建立二進制工具(binutils) 4. 建立初始編譯器(bootstrap gcc) 5. 建立c庫(glibc) 6. 建立全套編譯器(full gcc)
⑹ 如何在linux中運行交叉編譯的程序
這里需要注意的是所謂平台,實際上包含兩個概念:
體系結構(Architecture)、操作系統(Operating
System)。同一個體系結構可以運行不同的操作系統;同樣,同一個操作系統也可以在不同的體系結構上運行。
方法及步驟:
1、搭建交叉編譯環境
選...
⑺ linux arm 交叉編譯怎麼使用
交叉編譯器通常以 arm-none-linux-gnueabi.tar.bz2 這樣的名稱發布(不同廠家的不同開發平台,交叉編譯工具鏈的實際名稱可能有所差別,請以實際為准),解壓命令: vmuser@Linux-host: ~$ tar xjvf arm-none-linux-gnueabi.tar.bz2 如果希望解壓...
⑻ 如何交叉編譯python到ARM-Linux平台
編譯sqlite
先去 http://www.sqlite.org/download.html 下載最新的sqlite源代碼,我這里用的是3.5.6版本的。
我推薦使用amalgamation版本的源代碼,這個代碼只有幾個文件而已,編譯起來方便,而且據說 編譯器好的話,還可能編譯出更高效的代碼。 我下載的是
[plain]
view plain
http://www.sqlite.org/sqlite-amalgamation-3.5.6.tar.gz
先運行以下幾步:
[plain]
view plain
tar zxf sqlite-amalgamation-3.5.6.tar.gz
cd sqlite-3.5.6
./configure --host=arm-linux --prefix=/usr/local/arm/3.3.2 --enable-shared --disable-readline --disable-dynamic-extensions
以上是把sqlite解壓縮,然後做一些配置,這里,我希望sqlite到時候安裝到/usr/local/arm/3.3.2里,要生成動態鏈接庫,不要readline,不要sqlite的動態擴展。
然後編輯Makefile,把CFLAG和CXXFLAG中的-g去掉,我們不用debug sqlite。
接下來就可以編譯和安裝sqlite了:
[plain]
view plain
make
make install
這一步就完成了sqlite的編譯和安裝了。
編譯python
先去http://www.python.org/download/下載最新版本的python源代碼,我這里下載的是:
[plain]
view plain
http://www.python.org/ftp/python/2.5.1/Python-2.5.1.tar.bz2
先把python解壓縮:
[plain]
view plain
tar jxf Python-2.5.1.tar.bz2
cd Python-2.5.1
編譯pc版本的語法解析器
由於在編譯python的時候,需要先編譯一個叫pgen的程序出來,用於生成語法解析器,所以我們要先生成一個pc版本的pgen:
[plain]
view plain
mkdir build.pc
cd build.pc
../configure
make Parser/pgen
然後ls Parser一下,應該就能看到有pgen了。
修改configure
configure在檢測編譯器的printf是否支持%zd的時候,如果發現是在cross compile,就直接不幹活了。這還了得?
把這一部分的檢測代碼去掉。這段代碼起始於
[plain]
view plain
echo "$as_me:$LINENO: checking for %zd printf() format support" >&5
echo $ECHO_N "checking for %zd printf() format support... $ECHO_C" >&6
if test "$cross_compiling" = yes; then
結束於
[plain]
view plain
cat >>confdefs.h <<\_ACEOF
#define PY_FORMAT_SIZE_T "z"
_ACEOF
else
echo "$as_me: program exited with status $ac_status" >&5
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
( exit $ac_status )
echo "$as_me:$LINENO: result: no" >&5
echo "${ECHO_T}no" >&6
fi
rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
fi
把這兩段以及中間的內容都刪除掉就可以了。
編譯arm版本的python
有了語法解析器,就可以開始編譯arm版本的python了。
[plain]
view plain
mkdir ../build.arm
cd ../build.arm
../configure --prefix=/home/leojay/test/arm-system-working/rootfs --disable-ipv6 --host=arm-linux --enable-shared
先創建一個用於編譯的目錄build.arm,再對python做一些配置,如安裝目錄,不要ipv6,使用arm-linux的編譯器,生成動態鏈接庫。
修改Makefile
之後就要對Makefile做一些修改,把
[plain]
view plain
OPT= -DNDEBUG -g -O3 -Wall -Wstrict-prototypes
一行中,去掉-g,我們不要debug python,-O3改為-O2,空間緊張O2就可以了。
在
[plain]
view plain
PGEN= Parser/pgen$(EXE)
一行的下面加上
[plain]
view plain
PGEN_HOST= ../build.pc/Parser/pgen$(EXE)
表明我們在HOST上運行的pgen
在要使用PGEN的地方改為PGEN_HOST:
[plain]
view plain
$(GRAMMAR_H) $(GRAMMAR_C): $(PGEN) $(GRAMMAR_INPUT)
-$(PGEN) $(GRAMMAR_INPUT) $(GRAMMAR_H) $(GRAMMAR_C)
改為:
[plain]
view plain
$(GRAMMAR_H) $(GRAMMAR_C): $(PGEN) $(GRAMMAR_INPUT)
-$(PGEN_HOST) $(GRAMMAR_INPUT) $(GRAMMAR_H) $(GRAMMAR_C)
修改所有使用新生成的python的地方。
所有如 ./$(BUILDPYTHON) 的地方,都改為python
如:
[plain]
view plain
platform: $(BUILDPYTHON)
$(RUNSHARED) ./$(BUILDPYTHON) -E -c 'import sys ; from distutils.util import get_platform ; print get_platform()+"-"+sys.version[0:3]' >platform
改為
[plain]
view plain
platform: $(BUILDPYTHON)
$(RUNSHARED) python -E -c 'import sys ; from distutils.util import get_platform ; print get_platform()+"-"+sys.version[0:3]' >platform
這種地方比較多,大家小心修改。
修改setup.py
setup.py負責編譯python的各個擴展模塊。但是,由於python完全沒有考慮cross compile,所以要做一些修改。
PyBuildExt類:
函數的前兩行是把/usr/local加到搜索目錄中,我們的cross compiler一般不會直接安裝在 /usr/local裡面的,所以這兩行去掉:
[plain]
view plain
lib_dirs, inc_dirs的設定中,把中括弧里的那些都去掉。 以下所有模塊都不要:
這個函數在編譯了所有的extension後,會去load這些剛編譯好的extension, 但我們在i686的電腦上顯然不能load,所以要跳過這些操作。 在 build_ext.build_extension(self, ext)後面直接寫一個return,不做load。
for d in ['/usr/local/arm/3.3.2/include']
for d in inc_dirs + sqlite_inc_paths:
ssl, openssl, bdb, dbm, termios, nsl, ncurses, bz2, linuxaudiodev, ossaudiodev, tkinter
add_dir_to_list(self.compiler.library_dirs, '/usr/local/lib')
add_dir_to_list(self.compiler.include_dirs, '/usr/local/include')
build_extension函數:
detect_moles函數:
cmath, ctypes, _testcapi, pwd, grp, spwd, mmap, audioop, imageop, rgbimg, readline,
[plain]
view plain
由於python本身的問題,現在ctypes還不能在除i386以外的機器上運行,所以ctypes也去掉 編譯sqlite的地方:
[plain]
view plain
改為:
[plain]
view plain
因為我的sqlite3安裝在這里,如果這里不改的話,setup.py會在我的電腦上找sqlite
main函數:
setup函數調用的時候,把要安裝的scripts那一部分去掉
之後就可以make && make install了。
附上我修改後的 Makefile 和 setup.py 供大家參考
裁減python
python完全安裝後,實在是很大,所以,要把一些肯定用不上的庫去掉。 所以,再附上我的裁減腳本 cleanpy.sh
注意,由於我的python程序都運行在python -OO的參數下,所有的.py和.pyc都不需要, 只要有.pyo就可以了。所以,這個腳本會把所有的.py和.pyc都刪除掉。
大家可以根據自己的需要做調整。
⑼ 如何交叉編譯node.js到armv7的linux下
最先用avr寫。包括啟動程序,內核,文件系統。 如果uboot已經寫進去了,那麼以後可以配置好uboot和nfs, 直接啟動到uboot狀態,通過uboot的命令和網路進行燒寫內核和fs。