armlinuxandroid
A. 如何在安卓系統上使用arm-linux-gdb調試內核
1,先下載最新版本的gdb源代碼包,我使用的是gdb-7.6.tar.gz,使用tar命令進行解包(tar -xvzf gdb-7.6.tar.gz),cd進gdb-7.6/gdb目錄,使用vi找到remote.c中的如下代碼:
if(buf_len > 2 * rsa->sizeof_g_packet)
error(_("Remote 'g' packet reply is too long: %s"),rs->buf);
將上面兩行注釋掉,添加如下代碼
if(buf_len > 2 * rsa->sizeof_g_packet)
{
rsa->sizeof_g_packet = buf_len;
for(i = 0; i < gdbarch_num_regs(gdbarch); i++)
{
if(rsa->regs[i].pnum == -1)
continue;
if(rsa->regs[i].offset >= rsa->sizeof_g_packet)
rsa->regs[i].in_g_packet = 0;
else
rsa->regs[i].in_g_packet = 1;
}
}
使用如下命令對代碼進行配置、編譯和安裝
./configure --target=arm-linux --prefix=/usr/local/arm-gdb -v
make
make install
2,gdbserver使用android4.2模擬器中自帶的版本(v7.1)
3,將NDK編譯好的C/C++可執行程序,上傳到模擬器中/data/test目錄下,假設可執行程序的名稱為testHello。
4,使用命令:gdbserver :7000 /data/test/testHello 啟動模擬器端的調試。
5,啟動arm-linux-gdb之前,使用vi打開~/.bash_profile文件,在其中添加:
export PATH=$PATH:/usr/local/arm-gdb/bin,以便在程序的其他目錄可以直接啟動arm-linux-gdb程序
6,cd至ndk編譯好的testHello文件所在目錄
7,使用如下命令進行埠映射:adb forward tcp:7000 tcp:7000,將模擬器的7000埠和本機的7000埠進行映射
8,使用命令:arm-linux-gdb testHello啟動gdb調試
9,使用target remote :7000 鏈接模擬器中gdbserver啟動的服務。
10,自此,我們就可以使用gdb命令進行代碼調試了。
B. Android,ARM,Linux之間有什麼聯系
android是google大神推出的新操作系統
arm是一種精簡指令集的cpu,對立於傳統的復雜指令集cpu,如X86架構的
linux也是一種操作系統,嵌入式與伺服器上占據絕對優勢,與windows二分天下
關系就是 android和linux都可以在arm上運行
C. 支持linux的arm嵌入式開發板,能支持android嗎android好像也是基於linux的。
支持linux就能只是android,但開發板供應商未必能將android移植過來。
D. 安卓智能手機的基於ARM架構的處理器,為什麼能夠支持基於Linux內核的操作系統
Android是基於Linux內核的操作系統。
提到Linux內核的時候,應該把它從概念上和「Linux操作系統」分割看來,內核只包括最基本的抽象,內存模型、進程調度、中斷處理等等。而操作系統是一個更廣的概念,不光包括內核,還包括了設備驅動、應用程序框架以及一些關鍵的能夠讓這個操作系統能為人所用的軟體。所以Ubuntu, Fedora等等這些桌面發行版可以看做是包裝了Linux內核的、不同的Linux操作系統。
Android 開發之初fork了Linux kernel,在其基礎上進行了以下改進:
1. 添加新的的設備驅動
2. 重寫了c lib(Bionic)
3. 實現了基於java的應用程序框架
4. 對內核的小修改
大部分的修改都是在內核之上的,也就是說android內核和其他桌面Linux內核是非常接近的(在Linux kernel 3.3 之後,Android分支的內核代碼開始merge回原Linux內核repo),內核所完成的抽象,如內存模型、進程調度等,是一致的。
Android不是Linux
看到這個標題大家可能會有些迷惑,前面不是一直說Android是基於Linux內核的嗎,怎麼現在又不是Linux了?迷惑也是正常的,請先看下面幾個要點,然後我們將對每一個要點進行分析,看完後你就會覺得Android不是Linux了。
1.它沒有本地窗口系統
什麼是本地窗口系統呢?本地窗口系統是指GNU/Linux上的X窗口系統,或者Mac OX X的Quartz等。不同的操作系統的窗口系統可能不一樣,Android並沒有使用(也不需要使用)Linux的X窗口系統,這是Android不是Linux的一個基本原因。
2.它沒有glibc支持
由於Android最初用於一些便攜的移動設備上,所以,可能出於效率等方面的考慮,Android並沒有採用glibc作為C庫,而是Google自己開發了一套Bionic Libc來代替glibc。
3.它並不包括一整套標準的Linux使用程序
Android並沒有完全照搬Liunx系統的內核,除了修正部分Liunx的Bug之外,還增加了不少內容,比如:它基於ARM構架增加的Gold-Fish平台,以及yaffs2 FLASH文件系統等。
4.Android專有的驅動程序
除了上面這些不同點之外,Android還對Linux設備驅動進行了增強。
上面這些要點足以說明Android不是Linux。本書的主要內容將圍繞Android的這些特有的部分展開,我們的講解會盡量通俗易懂,但還是建議大家先復習一下Linux內核的基本知識。在具體學習之前,我們還是先來總體瀏覽一下Android對Linux內核進行了哪些改動,在移植時就需要對這些改動加以調整。
E. 如何選擇單片機和Android-LInux-ARM開發板
學ARM牽涉到得知識很多,基礎是C語言和單片機,學好C語言就有好的軟體基礎,學好單片機就有好的硬體基礎。為什麼說這兩門是基礎呢,道理很簡單,arm就是一個復雜的單片機。 學習也是一個循序漸進的過程,一個人用單片用得多的時候他就會碰到瓶頸,例如在做某些項目時,單片機工作頻率低,不能運行大型程序,這時我們想到用處理速度更高的單片機,這時ARM是一個不錯的選擇;有時我們要同時處理多個任務,但單片機同一時間只能處理一個任務(只能運行一個程序),或許你會想到用多個單片機來完成,不錯的想法,但用ARM或許能更好的能幫你解決問題。 上面說過既然ARM也是一個單片機,那麼ARM用什麼辦法來實現多任務處理呢,這時我們會想到多任務操作系統——常用的liunx操作系統。我們用ARM來運行操作系系統,再用這個系統來運行我們的程序,這不就實現了多任務嗎,就像我們電腦一樣,你電腦裝了WINDOWS系統後就可邊看電影變聽歌曲了,設想一下電腦不裝系統能幹什麼,這很有意思,在操作系統出現以前,他們用按鍵控制計算機程序的運行,和用按鍵來控制單片機有舍區別?那為什麼單片機不能運行操作系統,這是因為單片機得工作頻率低和內部資源少使單片機難以運行操作系統。 至於開發板能做什麼,很簡單,只要你玩會了LIUNX系統,那麼你在linux環境下(一般指的裝有linux系統的電腦)編的各種程序都能下載到ARM里立運行,因為ARM里運行LIUNX系統,應用程序都可在liunx上運行,例如你編個攝像頭驅動,MP3播放器,電影播放器,一些游戲等。就像在windows上運行軟體一樣。 這些知識是關於入門前對於arm有一個較系的了解和理解,希望對你有幫助(純手寫)
F. cpu 是arm 架構的linux 麒麟系統 怎樣使用android studio 開發app 程序
這個你需要去下載相應的Linux版本的android studio開發軟體,然後將其安裝到你的Linux系統上,安裝好後,進行相應的設置,就可以使用android studio開發app程序了。
樓主如果對Linux系統感興趣,想學習更多Linux系統知識,可以網路《Linux就該這么學》,不錯的一本Linux系統教程。
G. arm跑android和linux哪個效率更高,大概能夠高多少(cortex-a9)
Android和linux兩個不是同一個等級的東西,linux是內核,android是運行在linux之上的應用,或者叫操作系統因此,ARM平台,肯定是運行linux效率要高。
1.ARM架構,過去稱作進階精簡指令集機器(Advanced RISC Machine,更早稱作:Acorn RISC Machine),是一個32位精簡指令集(RISC)處理器架構,其廣泛地使用在許多嵌入式系統設計。由於節能的特點,ARM處理器非常適用於行動通訊領域,符合其主要設計目標為低耗電的特性。
2.ARM就當作一款超強的單片機,可以單機跑程序,也可加操作系統。如果要加操作系統,通常是指linux,當然還有別的可選,比如WinCE,uC/OS等等。
3.Android是用java編寫和應用操作系統,而Android的低層是Linux,因此,Linux的運行效率肯定比它的應用效率要高的。