準備默認以下所列舉的軟件都已安裝完畢,主機和目標機可以通訊,。 - 主機平臺:Ubuntu 16.04 LTS(x64)
- 目標平臺:ARM40-A5D3
- 虛擬機:VMware? Workstation 12 Pro
- Python版本:Python3.6.4
- 編譯工具鏈:gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabi
- 終端工具:putty,secureCRT
部署zlib為什么要先編譯zlib?因為zlib模塊為python壓縮方法提供支持,。 如果不預(yù)先編譯zlib,,編譯python的時候就會報“zlib 模塊找不到”的錯誤。 編譯Ubuntu(PC版),,ARM版兩個版本的zlib,,為下面的交叉編譯Python-3.6.4做準備。 注意:zlib的configure不支持用CC變量來指定交叉工具鏈,。 $ cd ~$ tar xzvf zlib-1.2.11.tar.gz$ ls$ cd zlib-1.2.11/$ ls 編譯Ubuntu(PC版)zlib: $ ./configure$ make$ sudo make install$ exit
編譯ARM版zlib: $ cd ~/zlib-1.2.11/$ sudo mkdir /opt/zlib$ export CC=arm-linux-gnueabi-gcc$ ./configure --prefix=/opt/zlib$ make$ sudo make install$ exit 部署Ubuntu Python3.6.4將下載的Python3.6.4源代碼復(fù)制到虛擬機Ubuntu中,,解壓到指定目錄。默認是當(dāng)前用戶目錄下,。 $ cd ~$ ls$ xz -d Python-3.6.4.tar.xz$ ls$ tar xvf Python-3.6.4.tar$ cd Python-3.6.4/$ ls
Ubuntu上python3的版本大于3.6.4,,請?zhí)^此步驟。 1)Ubuntu上的python3的版本不能低于3.6.4,,否則在交叉編譯Python-3.6.4的時候就會失?。∧JUbuntu python為最新版本,,如果不是,,需要手動編譯安裝Python-3.6.4。 2)編譯Python-3.6.4前必須修改Python-3.6.4/Modules/Setup.dist文件,, 否則編譯過程中有可能會報“zlib 模塊找不到”的錯誤,。 $ python3 -V$ cd ~/Python-3.6.4/$ ls$ vim Modules/Setup.dist$ ./configure$ make$ sudo make install
編譯ARM Python3.6.41)在交叉編譯Python時,需要用到pgen解釋器,。 如果編譯的是ARM架構(gòu)的解釋器,,是不能在PC上運行的,會導(dǎo)致編譯失敗,。 所以要預(yù)先編譯出一個能Ubuntu上運行的pgen,。 $ cd ~/Python-3.6.4/$ make distclean $ ls$ ./configure$ make Parser/pgen 1)在Python-3.6.4目錄下,創(chuàng)建build-arm40的目錄,; 交叉編譯python,,將在這個目錄下進行。 2)在/opt目錄下創(chuàng)建python3目錄,; 將交叉編譯好的zlib庫,,復(fù)制到python3目錄下,注意這一步很關(guān)鍵,。 注意…/configure,,“/”的前面是有兩個點的,。 $ cd ~/Python-3.6.4/$ mkdir build-arm40$ cd build-arm40$ sudo mkdir /opt/python3$ sudo cp -rfp /opt/zlib/* /opt/python3/$ ls /opt/python3/$ ../configure CC=arm-linux-gnueabi-gcc \ CXX=arm-linux-gnueabi-g++ \ AR=arm-linux-gnueabi-ar \ RANLIB=arm-linux-gnueabi-ranlib \ --host=arm-linux-gnueabi \ --build=x86_64-linux-gnu \ --target=arm-linux-gnueabi \ --disable-ipv6 \ --prefix=/opt/python3 \ --with-ensurepip=yes \ --enable-optimizations \ ac_cv_file__dev_ptmx=yes \ ac_cv_file__dev_ptc=yes
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
不要急著make,下面的步驟很關(guān)鍵,。 1)將剛才創(chuàng)建好的Ubuntu版本的pgen,,復(fù)制到build-arm40的Parser目錄下。 2)交叉編譯Python-3.6.4前必須修改Modules/Setup文件,,否則編譯過程中有可能會報“zlib 模塊找不到”的錯誤,。 3)touch –t 12312359 ./Parser/pgen ; 將pgen文件的日期改為今年的最后一分鐘生成的。為什么需要這一步,?因為arm版python在make時,,會生成它的pgen,就會把剛才復(fù)制過來的pgen給替換掉,,改成未來的時間,,就會忽略跳過,。引用1 $ cd build-arm40$ ls$ cp ../Parser/pgen ./Parser/$ ll ./Parser/$ touch -t 12312359 ./Parser/pgen$ ll ./Parser/$ vim Modules/Setup
4)切換到root賬戶進行make,以防由于環(huán)境變量不一致的導(dǎo)致編譯錯誤,。 5)編輯root環(huán)境下的.bashrc文件,并使交叉編譯器生效,。 在.bashrc文件末尾添加 export PATH=/opt/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabi/bin:$PATH
$ su -root# cd ~root# vim .bashrcroot# source .bashrcroot# echo $PATHroot# cd /home/ubt1604/Python-3.6.4/build-arm40/root# makeroot# make install
關(guān)于報錯:主要是zlib缺失,,gcc交叉編譯工具鏈路徑或者環(huán)境變量的問題。 編譯python3.6.4結(jié)束了,,下面將它移植ARM40上,。 移植ARM Python3.6.41)將Ubuntu /opt目錄下的python3目錄進行打包; 2)通過NFS將它解壓到ARM40的/opt目錄下。 $ cd /opt/$ sudo tar cvf python3.tar python3/$ ls$ sudo mv python3.tar /home/nfsroot/$ ls /home/nfsroot/ 登錄到ARM40,,使用NFS連接到Ubuntu nfs共享目錄/home/nfsroot 默認ARM40 IP地址:192.168.6.5,;Ubuntu默認IP地址:192.168.6.10; root@ARM40:# cd /homeroot@ARM40:# mkdir nfsrootroot@ARM40:# lsroot@ARM40:# lsroot@ARM40:# mount -t nfs -o nolock 192.168.6.10:/home/nfsroot /home/nfsrootroot@ARM40:# cd nfsroot/root@ARM40:# lsroot@ARM40:# tar xvf python3.tar -C /opt/root@ARM40:# ls /opt/root@ARM40:# cd /opt/python3/bin/root@ARM40:# ./python3.6 -V>>Python 3.6.4
至此,,Python3.6.4移植結(jié)束,。 參考引用
|