ラベル 作業系統 の投稿を表示しています。 すべての投稿を表示
ラベル 作業系統 の投稿を表示しています。 すべての投稿を表示

2018年5月27日日曜日

[AOSP] 用 Ubuntu 18.04 建立 Android 系統建置環境


在 Ubuntu 上使用 AOSP(Android Open Source Project) 編譯 android 系統

過了好多年,從之前的 ubuntu 14.04 到現在的 ubuntu 18.04

AOSP 都從 5.x 進化到 8.x 了

感覺現在連建置都變簡單了

所以只好再打一篇來記錄一下

之前好像還要打些什麼的

不過內容太多了就懶的寫了

這篇也偷懶直接複製之前的來修改w

所以這篇依然是 AOSP 的 master 的建置



為了減少除錯的時間同樣這次直接使用乾淨的系統(。-_-。)

手邊好像也沒有多餘的機器所以直接開 VM 來做...

等預算夠再來搞一台實體機好了XD

需要的東西

1. Virtualbox 任何可以安裝 Ubuntu 18.04 x64系統的版本都好
2. Ubuntu 18.04 x64 系統映像檔


然後用預設的方式安裝系統

雖然說是預設...

但是根據上面的夠強大的硬體...

基本上有三個東西要調整...

一個叫做 CPU

一個叫做 記憶體

一個叫做 硬碟

CPU 可能的話請給到 2 個核心以上

記憶體如果可能的話請給到 8GB 以上

硬碟容量分配無論如何請不要小於 100GB ← \_(・ω・`)ココ重要!

因為實際整個建置完之後的系統容量就超過 80G 了


在裝好後乾淨的 Ubuntu 系統上什麼都不要做

連更新什麼的都不要...O(>﹏<)O

雖然其實做了也不影響就是ww

然後直接在 Ubuntu 上打開終端機(alt + F2 → gnome-terminal, ctrl + alt + T)

在 terminal 裡照著下面的指令一行一行的敲就好...

沒有意外的話最後就會出現結果了XD



安裝必要的套件

$ sudo apt-get install git repo gnupg flex bison gperf build-essential zip curl zlib1g-dev libc6-dev lib32ncurses5-dev lib32z1 x11proto-core-dev libx11-dev lib32z1-dev libgl1-mesa-dev g++-multilib tofrodos python-markdown libxml2-utils software-properties-common xsltproc libx11-dev:i386 liblz4-tool android-tools-adb android-tools-fastboot google-android-build-tools-installer bzip2 libbz2-dev libbz2-1.0 libghc-bzlib-dev squashfs-tools pngcrush schedtool dpkg-dev make optipng maven python-mako python3-mako python python3 syslinux-utils

安裝 OpenJDK

和之前不同的是,這次只需要 OpenJDK 就行了
$ sudo apt-get install openjdk-8-jdk

設定 git/repo

$ mkdir ~/bin
$ curl http://commondatastorage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
$ chmod a+x ~/bin/repo
$ git config --global user.email "android"
$ git config --global user.name "android"

user.email 和 user.name 的 "android"可以是任意的名稱

所以隨意就好XD

設定環境變數


再來就是要 build 整個專案了...

在 AOSP 中有許多分支

這裡只記錄 master 分支 (現時點的AOSP master 分支版本為 8.1)

這邊跟之前的不一樣,這次不再需要對 JAVA 做設定了

所以這個步驟可以直接跳過(*^▽^*)


把 AOSP master 分支的 source 抓下來

這邊要注意的是 source 很多而且很大...

所以下完指令後就可以去睡覺了...XD
$ repo init -u https://android.googlesource.com/platform/manifest
$ repo sync -j8
這裡的 sync 的參數 -j8 是根據現在正在執行這個指令的電腦的CPU資源決定的

可以不寫讓它用預設的方式執行也可以

8 指的是現在這台電腦的核心數

理論上越多就越快...

所以也可以給 -j16 或 -j24 之類的數字

沒那麼多的話給 -j2 或 -j4 也可以XD



建置 AOSP master 分支

再建置之前先重新讀取資源
$ source build/envsetup.sh

再來就是執行建置的動作啦...
$ lunch aosp_arm-eng
$ make -j8
至於選擇 aosp_arm-eng 則是因為現在手機大部分都是這個規格XD

其實這還有其他選項就是了...

有興趣可以直接下 lunch 指令看XD

而這裡的 -j8 和 上面的 -j8 是一樣的意思

不過個人的習慣是 8G 的記憶體會給 -j4 然後 4G 的記憶體會給 -j2

至於為什麼o(‧"‧)o...好像也沒為什麼...就只是壞習慣而已XD

然後因為 android 是個巨大的專案...

所以下完 make 指令之後又可以去睡覺了...(´▽`*)

另外題外話一下

根據網路上找到的資料是用 intel xeon 8C16T 的 CPU 配 24GB 的記憶體

建置需要花 37 分鐘的時間

然後這次我拿 intel m7-6y75 開 VM 分資源 2C2T 的 CPU 配 8G 的記憶體

建置花了超過 9.5 個小時...Σ(゚д゚) エッ!?

用 AMD R7-1700 開 VM 分資源 8C8T 的 CPU 配 8G 的記憶體

只要 1 個小時 50 分鐘就結束了。

看來選 CPU 是一件很重要的事ww



基本上到這邊只要 make 跑完沒有錯誤就全部結束了...

然後建置完的輸出檔案會再 out/target/product/generic 資料夾下

最重要的有 system.img、userdata.img 和  ramdisk.img 三個映像檔

一定要確認這三個檔案有沒有存在...XD


最後就是把好不容易建好的系統放到模擬器上面執行了...


模擬測試

$ emulator

嗯...就這麼一個指令而已XD

然後就慢慢等模擬器自己動作了XD

沒意外的話就會在模擬器上面看到自己建置的 Android 系統了XD

有意外的話就只好慢慢 debug 啦~~(σ≧▽≦)σ

...

其實一定會有意外啦....ε=ε=┏( >_<)┛

因為模擬器預設的資源非常少...

所以會一直 crash 或是運作不順之類的XD

其實還有很多東西要設定...

不過這篇主要是在寫環境建置

所以模擬器設定就省略不寫了XD


=====


相關來源:

android - building the system
https://source.android.com/source/building.html

2016年3月16日水曜日

[VirtualBox] VirtualBox 5.0.16 在 Windows 10 Pro x64 下預設選擇 64bit client 的可能原因

在 Windows 10 Pro x64 下,安裝 VirtualBox 5.0.16 之後,

VirtualBox 沒有辦法新增 64bit client 的可能解決方法。

沒有64bit選項

自從把電腦從 Windows 8.1 升級到 Windows 10 之後就一堆問題。

看起來 Windows 10 也存在著很多的問題。

這次的問題是在 Windows 10 Pro 下安裝 VirtualBox 之後,原本的 64bit client 的選項就不見了。

造成 64bit 的選項消失的結果可能有很多。

所以紀錄幾種常見的狀況。

解決方法

1. BIOS 的 vt-x 要開啟。

2. 用管理員權限安裝和執行。

3. 關掉預設開啟的 Hyper-V。(包含所有會使用虛擬化技術的應用程式都有可能)


通常這樣應該就可以再次召喚 64bit 選項出來了。

還是沒有的話,就只好再繼續找看什麼東西出問題了。

相關來源:

VirtualBoxで64ビット版OSをインストールできない場合の対処方法
http://little-beans.net/howto/virtualbox-64bit-os/

2015年10月5日月曜日

[AOSP] 用 Ubuntu 14.04 建立 Android 系統建置環境


在 Ubuntu 上使用 AOSP(Android Open Source Project) 編譯 android 系統

不知道是不是我關鍵字下的不對...

這東西怎麼資料那麼少...(´・ω・`)?

所以只好自己打一篇來做記錄了OTL

其實這篇大概拖了快一年了XD

這篇主要是 AOSP 的 master 的建置



為了減少除錯的時間所以在這邊直接使用乾淨的系統(。-_-。)

手邊好像也沒有多餘的機器所以直接開 VM 來做...

等預算夠再來搞一台實體機好了XD

需要的東西

1. Virtualbox 任何可以安裝 Ubuntu 14.04 x64系統的版本都好
2. Ubuntu 14.04 x64 系統映像檔
3. 其實這點是打完整篇才想到要加的...基本上要有夠強大的硬體支撐才行!!


然後用預設的方式安裝系統

雖然說是預設...

但是根據上面的夠強大的硬體...

基本上有三個東西要調整...

一個叫做 CPU

一個叫做 記憶體

一個叫做 硬碟

CPU 可能的話請給到 2 個核心以上

記憶體如果可能的話請給到 8GB 以上

硬碟容量分配無論如何請不要小於 100GB ← \_(・ω・`)ココ重要!



在裝好後乾淨的 Ubuntu 系統上什麼都不要做

連更新什麼的都不要...O(>﹏<)O

然後直接在 Ubuntu 上打開終端機(alt + F2 → gnome-terminal)

在 terminal 裡照著下面的指令一行一行的敲就好...

沒有意外的話最後就會出現結果了XD



安裝必要的套件

$ sudo apt-get install git-core gnupg flex bison gperf build-essential zip curl zlib1g-dev libc6-dev lib32ncurses5-dev lib32z1 x11proto-core-dev libx11-dev lib32readline-gplv2-dev lib32z-dev libgl1-mesa-dev g++-multilib mingw32 tofrodos python-markdown libxml2-utils python-software-properties xsltproc libx11-dev:i386 android-tools-adb android-tools-fastboot liblz4-tool gcc-4.6 g++-4.6 gcc-4.6-multilib g++-4.6-multilib

安裝OracleJDK 和 OpenJDK

OpenJDK 是在 build AOSP 的 master 和 5.0.0 時會需要用到的
$ sudo add-apt-repository ppa:webupd8team/java
$ sudo apt-get update && sudo apt-get install oracle-java6-installer
$ sudo apt-get install openjdk-7-jdk

設定 git/repo

$ mkdir ~/bin
$ curl http://commondatastorage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
$ chmod a+x ~/bin/repo
$ git config --global user.email "android"
$ git config --global user.name "android"

user.email 和 user.name 的 "android"可以是任意的名稱

所以隨意就好XD

設定環境變數

在 ~/bin 路徑下新增一個環境變數檔案叫做 android-env.sh
sudo gedit ~/bin/android-env.sh

然後在新增的 android-env.sh 裡加入 export 敘述句

下面這四行是要打在 android-env.sh 檔案裡的!!
export JAVA_HOME=/usr/lib/jvm/java-7-openjdk-amd64
export PATH=$PATH:$JAVA_HOME/bin
export ANDROID_JAVA_HOME=$JAVA_HOME
export PATH=$PATH:~/bin

打完後記得存檔再關閉離開
然後要重新載入剛剛打完的 android-env.sh 檔案
所以執行下面的敘述句
$ source ~/bin/android-env.sh

也是可以直接寫到 ~/.bashrc 之類的裡面

不過這樣會變成常態性一直在讀取這個檔案

所以這邊不這麼做XD



然後到這邊建置環境就設定完了XD

再來就是要 build 整個專案了...

在 AOSP 中有許多分支

這裡只記錄 master 分支 (現時點的AOSP master 分支版本為 5.1)

如果 分支的 android 版本小於 5.0.0 (不含) 則還有其他的環境變數要設定...

可能之後可以再打一篇文章這樣XD



把 AOSP master 分支的 source 抓下來

這邊要注意的是 source 很多而且很大...

所以下完指令後就可以去睡覺了...XD
$ repo init -u https://android.googlesource.com/platform/manifest
$ repo sync -j8
這裡的 sync 的參數 -j8 是根據現在正在執行這個指令的電腦的CPU資源決定的

可以不寫讓它用預設的方式執行也可以

8 指的是現在這台電腦的核心數

理論上越多就越快...

所以也可以給 -j16 或 -j24 之類的數字

沒那麼多的話給 -j2 或 -j4 也可以XD



建置 AOSP master 分支

再建置之前先重新讀取資源
$ source ~/bin/android-env.sh
$ source build/envsetup.sh

再來就是執行建置的動作啦...
$ lunch aosp_arm-eng
$ make -j8
至於選擇 aosp_arm-eng 則是因為現在手機大部分都是這個規格XD

其實這還有其他選項就是了...

有興趣可以直接下 lunch 指令看XD

而這裡的 -j8 和 上面的 -j8 是一樣的意思

不過個人的習慣是 8G 的記憶體會給 -j4 然後 4G 的記憶體會給 -j2

至於為什麼o(‧"‧)o...好像也沒為什麼...就只是壞習慣而已XD

然後因為 android 是個巨大的專案...

所以下完 make 指令之後又可以去睡覺了...(´▽`*)

另外題外話一下

根據網路上找到的資料是用 intel xeon 8C16T 的 CPU 配 24GB 的記憶體

建置需要花 37 分鐘的時間

然後我拿 intel i7-3820 開 VM 分資源 2C2T 的 CPU 配 4G 的記憶體

建置花了超過 6 個小時...Σ(゚д゚) エッ!?

實際上到底是多久我也不知道...XD

因為我等了 6 個小時候它還沒跑完所以就去睡覺了→_→



基本上到這邊只要 make 跑完沒有錯誤就全部結束了...

然後建置完的輸出檔案會再 out/target/product/generic 資料夾下

最重要的有 system.img、userdata.img 和  ramdisk.img 三個映像檔

一定要確認這三個檔案有沒有存在...XD


最後就是把好不容易建好的系統放到模擬器上面執行了...


模擬測試

$ emulator

嗯...就這麼一個指令而已XD

然後就慢慢等模擬器自己動作了XD

沒意外的話就會在模擬器上面看到自己建置的 Android 系統了XD

有意外的話就只好慢慢 debug 啦~~(σ≧▽≦)σ

...

其實一定會有意外啦....ε=ε=┏( >_<)┛

因為模擬器預設的資源非常少...

所以會一直 crash 或是運作不順之類的XD

其實還有很多東西要設定...

不過這篇主要是在寫環境建置

所以模擬器設定就省略不寫了XD


=====

整篇到這邊就結束了...

至於最重要的是

要怎麼把很辛苦建好的系統放到手機上執行

這好像才是花那麼多時間做上面整件事的最主要目的...o(‧"‧)o?

雖然是這麼說啦....

可是要怎麼放上去就...

嗯...有空再打另外一篇好了XD







相關來源:

android - building the system
https://source.android.com/source/building.html

AndroidのOS本体をビルドしてみよう
http://note.chiebukuro.yahoo.co.jp/detail/n185974

M Preview Downloads
https://developer.android.com/about/versions/marshmallow/download.html

Factory Images for Nexus Devices
https://developers.google.com/android/nexus/images?hl=en

CentOS7でAndroid4.4(AOSP)ビルド環境
http://qiita.com/Mask_Siva/items/cf65d9889893a7e62342

Android: ソースからシステムを構築しエミュレータで実行
http://otake.knowd2.com/drupal-rotake/?q=node/119

Android 4 (Ice Cream Sandwich) をビルドしてみる
http://www.gadgety.net/shin/tips/unix/android4.html

Ubuntu 14.04 64bit版での Android ビルド環境
http://blog.sola-dolphin-1.net/archives/4633272.html


2015年6月19日金曜日

[開發環境] Visual C++ Runtime 與作業系統相容性

印象中之前好像寫過一篇 visual studio 與作業系統相關性。

→[開發環境] 應用程式開發之開發環境版本。



這次來寫當以 MFC 開發完之後會遇到的問題。

在使用者的電腦上,多半不會裝 visual studio 這類的開發環境。

所以在使用者電腦上執行時,需要安裝額外的 runtime 才有辦法使用。

而 visual studio 版本雖然一直進化,但是使用者的電腦並不會一直跟著進步。

雖然 windows 都已經要出 10 了,但還有許多使用者停留在 XP 或甚至 2000 及更早的系統。

所以在選擇 IDE 上又多了一種要考慮的因素。




Visual C++ Redistributable 和 OS 的版本

Visual C++ redistribution對應 Client OS
Visual Studio 2015 RCXP SP3, Vista SP2, 7 SP1, 8, 8.1, 10
Visual Studio 2013XP SP3, Vista SP2, 7 SP1, 8, 8.1
Visual Studio 2012 UP4XP SP3, Vista SP2, 7 SP1, 8, 8.1
Visual Studio 2010 SP1XP SP3, Vista, 7, 8, 8.1
Visual Studio 2008 SP12000 SP4, XP SP2, Vista, 7, 8, 8.1
Visual Studio 2005 SP198, 98 SE, Me, 2000 SP3, XP SP2, Vista, 7, 8, 8.1
看起來越早期的系統就只能考慮越早期的IDE了...(*・ω・)ノ


相關來源:
Visual C++ 2013 ランタイム
http://www7a.biglobe.ne.jp/~kasachan/vcredist2013.html

Visual Studio 2015 RC Compatibility
https://www.visualstudio.com/en-us/visual-studio-2015-compatibility-vs

Visual Studio 2013 の互換性
https://www.visualstudio.com/ja-jp/visual-studio-2013-compatibility-vs.aspx



2015年5月20日水曜日

[Linux] GNU/Linux 分支關係簡述

最近不知道為什麼一直在用Linux...

想說正好趁這次機會把Linux的分支關係寫一下,所以就有這篇了。

一般來說,Linux的分支主要有三大分支,分別為 debian、slackware、redhat。

除了三大分支以外,還有所謂的獨立系。

不過獨立系太麻煩了所以就不寫在這次的範圍內。

雖然說不講獨立系,不過還是大概說一下。

在獨立系中比較有名的是 Gentoo。

而 Google Chrome OS / Chromium OS 也是被歸類為獨立系的系統之一。

Google Chrome OS 從 2010年2月之後,底層從 ubuntu 換成了 Gentoo。

獨立系大概就這個比較重要。



各大分支最大的差異在 package 管理系統。

基本上每家都有自己的管理系統。

管理系統本身分為三個部分,形式、系統本體、前端。

debian 所使用的 package 是 deb 形式,而其管理系統為 dpkg ,前端為 apt。

redhat 所使用的 package 是 rpm 形式。

管理系統為 Redhat Package Manager(RPM),前端為 yum(Yellowdog Updater Modified)。

slackware 的眾多分之中, package 有使用 deb 形式也有使用 rpm 形式,管理系統為 ZYpp。

slackware 分支中的 openSUSE 所使用的即是 rpm 形式配上前端 Zypper/YaST。



某種程度上來說, slackware 是最早的分支版本。所以就從這分支開始說好了。

說到 slackware 大概最有名的就是 S.u.S.E.。

SUSE Linux 在 2003 年被 Novell 買去之後就變成了 open source。

然後改名成為現在的 openSUSE。

不過變成 openSUSE 只是其中一支分支。

除了不用錢的版本當然還是有商用版。

商用版則變成 SUSE Linux Enterprise Server/Desktop(SLES/SLED)。

openSUSE 在 Linux 版本分支的界定上感覺點微妙。

openSUSE 在 package 形式上是使用跟 radhat 一樣的 rpm 形式。

所以好像也有人把 openSUSE 認定為 redhat 分支的一部分?

不過從歷史演化上來看, openSUSE 應該還是屬於 slackware 分支。

slackeware 分支不知道為什麼在亞洲感覺好像快要消失一樣。

甚至不是很多人知道有這麼一個分支存在...

可是這在歐洲明明就是很大的分支...

在亞洲主要還是以 redhat 和 debian 為比較大宗。



debian 分支比較有名的就是 Ubuntu。

debian 在版本釋出時會有四個種類。

一般在使用的 stable 穩定版。

準備用來做下次穩定版的 testing 測試版。

開發者向的 unstable 不穩定版。

變化很劇烈的 experimental 實驗版。

在 debian 的開發順序中

當 package 在 experimental 版玩一玩發現可以用的時候就會丟進 unstable 版。

修正完基本穩定性之後就會進入 testing 版。

當 testing 版確定沒有什麼大問題之後就會變成 stable 版釋出。

而 sid 版指的就是 unstable 版。

testing 和 unstable 最大的差異在系統安全性。

unstable 的版本並不保證系統可以正常的運作。

testing 版則是就算有BUG也能在不影響使用的情況下運作。

stable 就沒什麼特別的...就是很穩定的版本。



redhat 分支則有許多版本。

redhat 分支就有許多有名的版本。

像是 Fedora、RHEL、CentOS。

雖然從分支歷史上來看其實看不出太大的關係。

不過實際關係應該是 Fedora → RHEL → CentOS。

簡單來說 redhat 分支中,Fedora 玩一玩覺得不錯的東西就會丟進 RHEL 裡面。

而將與商用無關的不分丟掉後,就變成了 CentOS。

這是三個版本最主要的關係和差異。

Fedora 的更新速度很快,在穩定之後才會加入 RHEL 裡。

RHEL 除去商用部分,做成 CentOS。

某種程度上來說,Fedora 其實就是 redhat 的測試版。

而 RHEL 則是穩定的商用版。

CentOS 則是穩定的免費版。


簡單來說比較有名的 linux 分支的關係大概是這樣。

當然有些東西表達的並不是非常精確。

不過應該沒有相距太遠意思到了就好XD



相關來源:

CentOSとは (CentOS/RHEL/Fedoraの関係についてまとめてみた)
http://mo-mo.hatenablog.com/entry/2014/02/13/125326

openSUSE と CentOS 全然ちがいますか? どっちが良いですか?
http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1447579574

linux の勉強をしたいのですが、Cent OSとSuse linuxで迷っています。 どちらがおすすめでしょうか。
http://q.hatena.ne.jp/1163282166

各種Linuxディストリビューション解説
http://kapper1224.sakura.ne.jp/UNIX2.html

Red Hat系とDebian系の違いを教えて下さい。
http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1029959760

Linuxについて質問です。Debian系、Red Hat系、Slackware系 、独立系がありますが、具体的にはどのような違いがあるんですか。
http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q11104091486;_ylt=A2RiHzvSe1FVV1QAoXC0_PN7?pos=2&ccode=ofv

GNU/Linux Distribution Timeline
http://futurist.se/gldt/

Slackware
http://dic.nicovideo.jp/a/slackware

Linuxディストリビューション
http://dic.nicovideo.jp/a/linux%E3%83%87%E3%82%A3%E3%82%B9%E3%83%88%E3%83%AA%E3%83%93%E3%83%A5%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3

Linuxディストリビューション
http://ja.wikipedia.org/wiki/Linux%E3%83%87%E3%82%A3%E3%82%B9%E3%83%88%E3%83%AA%E3%83%93%E3%83%A5%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3#Slackware.E7.B3.BB

Slackware
http://ja.wikipedia.org/wiki/Slackware

zypper の紹介
http://qiita.com/ftake/items/ff79832f15ce49725b52

openSUSE
http://ja.wikipedia.org/wiki/OpenSUSE

SUSE Linux Enterprise Server
http://ja.wikipedia.org/wiki/SUSE_Linux_Enterprise_Server

Debian
http://ja.wikipedia.org/wiki/Debian

パッケージ管理システム
http://ja.wikipedia.org/wiki/%E3%83%91%E3%83%83%E3%82%B1%E3%83%BC%E3%82%B8%E7%AE%A1%E7%90%86%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0

ZYpp
http://zh.wikipedia.org/wiki/ZYpp

openSUSE におけるパッケージ管理入門
http://www.slideshare.net/ftake/20111120-10248066