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的运行效率肯定比它的应用效率要高的。