fs/binfmt_aout.c:270: error: 'SEGMENT_SIZE' undeclared
Android主要有6部分
Applications (java)
--------------------------------
FrameWork (java)
=====================================
| Core Libraries
external Lib | --------------
| dalvik (jvm)
|
-----------------------------------
HAL
====================================
Linux Kernel
第一部分 : Kernel
先把kernel的代码拉下来
1 git clone git://android.git.kernel.org/kernel/common.git
git clone git://android.git.kernel.org/kernel/common.git -o eclair
git clone git://android.git.kernel.org/kernel/common.git -o v2.6.29
怎么kernel的版本总是2.6.27呢?我要的kernel版本是2.6.29,因为从2.6.29以后,kernel以及支持S3C6410了
(虽然支持S3C6410 ,但是大部分S3C6410的驱动没有) 而在2.6.27中没有 。
solution : git branch -a
git checkout v2.6.29/android-2.6.29
如果修改了Makefile,则出现:
error: You have local changes to 'Makefile'; cannot switch branches.
先把Makefile 重新checkout
git checkout Makefile
然后 git checkout v2.6.29/android-2.6.29
2 make menuconfig ACRH=arm
然后编译
an
In file included from arch/arm/plat-s3c/include/plat/cpu-freq.h:14,
from arch/arm/mach-s3c6410/cpu.c:32:
include/linux/cpufreq.h:258:31: error: macro parameters must be comma-separated
make[1]: *** [arch/arm/mach-s3c6410/cpu.o] 错误 1
solution :
#define cpufreq_exit_idle(int cpu, unsigned long ticks) do {} while (0)
修改为:
#define cpufreq_exit_idle( cpu, ticks) do {} while (0)
3 Android对kernel 主要有哪些改动呢?
1) 采用了Yaffs2
在文件系统 fs/yaffs2
2) 增加了Alarm,Ashmem,Binder,Power Management,Logger, Kernel Debugger,Low Memory Killer
其中Binder,Logger等在driver/staging/android下面
alarm 在 driver/rtc/alarm.c
Binder 为Application IPC所用,而 Power Managerment 为 android.os.PowerManager 所调用
从linux官方网站下载了一个2.6.29版本,和android的2.6.29进行比较,发现不同之处还很多。
所以,对于移植,最好还是在android的2.6.29的基础上,把一些相关的驱动移植上去,而不是把android的东西移植到linux 2.6.29之上。
4 kernel 的 GPS driver 在哪里 ?
在android中,定义了gps.h,需要自己按照 gps.h去实现GPS driver
第二部分 HAL
HAL 在hardware 目录下 ,它不是驱动,它其实是属于user space ,而不属于Kernel层。
也就是用HAL把上层的应用,服务 和下层的系统分开,在Android的早期版本中,没有这一层,1.0之后HAL层就比较明显了。
比如 背光的设置,我们可以实现一个lights.default.so动态库,这个库实现了接口 set_light ,而set_light会打开Kernel的
device,然后进行操作(通过IO Control ,或者写等)来调节背光。
HAL中有一个 RIL (Radio Interface Layer),主要是为了电话功能
第三部分 external Libs
这部分在external下面
1 它不是用glibc ,而用bionic
bionic 更快 更小 ,但不完全支持POSIX标准,比如C++ exceptions,wide char
这样其他的toolchain不能用于编译Android
个人认为,其实系统的快慢和glibc没有多大的关系,android的慢是因为平台的原因,而非glibc ,
所以android把glibc换成bionic,非明智之举,这样需要开发自己的编译器toolchain, bionic ,还不如把这个精力放在平台开发上
难道是为了绕开 GPL?
2 采用opencore 而非mplayer
支持hardware / software codec plug-ins
3 采用了sqlite 而非db4o
这样对于很多java人员,数据库方面的操作要修改,除非把db4o移植到android上(db4o可以无缝的运行在Android平台)
第四部分 Dalvik虚拟机
这部分是android的核心。在目录dalvik下,编译后生成dalvikvm
它和标准JVM的区别有
1)dalvik基于寄存器,而JVM基于stack
2) 性能上优与标准的JVM
它属于J2SE的一个子集,但是没有通过JAVA标准认证,支持Swing. 而J2ME的标准界面类就是lcdui包中的类,不支持swing.
参见 : http://www.mcuol.com/Tech/122/29755.htm
第五部分 Framework
这部分在framework下面。包括
. Activity manager
• Telephony manager
• Window Manager
• Power Manager
• Resource manager
• Notification Manager
它提供一个给应用调用的接口。
第六部分 Applications
这部分Google提供了很多应用,这部分在packages目录下面。比如packages/apps下面就有很多应用。
这些应用也是用Java写的,包括Google地图,浏览器,Google商店等
除了以上的6部分外,android还提供了一套toolchain,在prebuilt/linux-x86/toolchain/下有arm交叉编译器. 对于Native应用程序,必须要用android toolchain编译,用其他的toolchain编译的程序在android平台上用不了,因为其他的不是bionic.而对于kernel ,uboot可以用其他的toolchain编译,因为kernel,uboot是一个独立的,没有用到glibc .
由于toolchain已支持arm v5以上。所以如果要移植android ,假如cpu为arm V4 如S3C2440,则除了移植kernel外,还必须移植toolchain .
不过,很奇怪的是,我用android的toolchain编译kernel,出现错误,而用arm2008-q3却没问题???
fs/binfmt_aout.c: In function 'load_aout_binary':
fs/binfmt_aout.c:270: error: 'SEGMENT_SIZE' undeclared (first use in this function)
fs/binfmt_aout.c:270: error: (Each undeclared identifier is reported only once
fs/binfmt_aout.c:270: error: for each function it appears in.)
解决办法是:
Userspace binary formats --->
Kernel support for a.out and ECOFF binaries 这项去掉 就可以了
fs/binfmt_aout.c:270: error: 'SEGMENT_SIZE' undeclared相关推荐
- 编译内核遇到:error: ‘ovl_v1_fs_type’ undeclared (first use in this function)错误
如遇到如下错误: fs/overlayfs/super.c: In function 'ovl_init': fs/overlayfs/super.c:1331:30: error: 'ovl_v1_ ...
- Hadoop put file 错误:fs.FSInputChecker: Found checksum error
Hadoop往hdfs上put file的时候,今天报错如下: 16/03/12 08:15:17 INFO fs.FSInputChecker: Found checksum error: b[0, ...
- 【c语言 gcc9.1.0环境下编译报错】error: ‘true’ undeclared (first use in this function)
问题 网上验证一个单链表是否有环的c语言demo,放到gcc9.1.0的环境下编译,发现编译报错: error: 'true' undeclared (first use in this functi ...
- Android之ndk-build出现c:28:51: error: ‘get_string‘ undeclared here (not in a function)解决办法
1 problem ndk-build error: 'get_string' undeclared here (not in a function) 2 resolve jstring get_st ...
- 安装nginx时关系依赖库openssl.lib时,出现:error: 'NR_syscalls' undeclared (first use in this function)
安装nginx时关系依赖库openssl.lib时,出现:error: 'NR_syscalls' undeclared (first use in this function) 解决方案:根据arc ...
- /phalcon.zep.c:130892: error: ‘ZEND_FE_END’ undeclared here (not in a function)
/phalcon.zep.c:130892: error: 'ZEND_FE_END' undeclared here (not in a function) 因为centos6.5上的最新php版本 ...
- error: 'FILE' undeclared (first use in this function)
error: 'FILE' undeclared (first use in this function) 今天在打trace调试底层代码的时候添加: {FILE* fp = fopen(" ...
- Error ‘false‘ undeclared (first use in this function)解决
Error: 'false' undeclared (first use in this function)解决 在用DEVC++敲代码时,对如下程序报错 bool ok(int t){//判定第t个 ...
- error: ‘CLOCK_MONOTONIC‘ undeclared (first use in this function)
错误信息: /home/xx/test/main.c: In function 'main': /home/xx/test/main.c:37:21: error: storage size of ' ...
最新文章
- 2006年猪的述职报告
- linux vim python配置文件,Linux VIM8 Python 编辑器配置文件
- Swagger3.0
- 本地通过域名访问虚拟机的网站部署方法(Nginx)
- HTML5 Geolocation(地理定位)
- 随想录(找工作20问)
- labview csv文件处理_LabVIEW 相关知识点分类汇总
- ubunt18.04LTS+vscode+anaconda3下的python+C++调试
- 洛谷 P1144 最短路计数 解题报告
- 计算机初级程序员哪里颁发的,初级程序员证书怎么考_初级程序员证书考什么_上学吧...
- 杭电ACM-LCY算法进阶培训班-专题训练(Hash及其应用)
- 一文了解Clickhouse
- Ivor Horton's Beginning Visual C++ 2008
- 计算机毕业设计之java+ssm供应链管理信息系统
- 远程桌面连接:提示出现身份验证错误,要求的函数不受支持。这可能是由于CredSSP加密数据库修正错误。
- execve系统调用_Linux下的sys_execve系统调用
- 多模式交通需求预测模型-CMGAT
- 游龙传说服务器维护,3月15日维护:渡劫后155可传说
- java计算机毕业设计高校后勤保修系统源码+mysql数据库+系统+lw文档+部署
- 黑群晖+七彩虹CH84-DV全固态主板+4GDDR3+i3 4160+HP LJM 1005打印机+120G固态 捡垃圾装备弄一个黑群晖的无线打印机+后期再加硬盘接着整蛊