1.准备工作: (ubuntu1110 32位)
ubuntu等linuxOS,下载好eclipse,安装好JDK, 安装好android的SDK, 在eclipse中成功打开android 手机模拟器即OK。
2.初始化编译环境 :
关注该网页上的“installing required packages”,其中有的软件包因为版本问题而安装不上,不用管它,之后遇到错误再单独解决。
3.下载内核源码:
android 2.3 内核 下载需要等待一段时间。
4.下载交叉编译器:
该步骤有可能耗费大量时间,依据网速不同,几个小时到几天不等,或许可以尝试git clone 后面的地址只下载prebuilt/linux-x86/toolchain
5.设置参数以及编译:
$ export ARCH=arm
$ export SUBARCH=arm
$ export CROSS_COMPILE=arm-eabi-
$ cd goldfish // 进入下载的源代码目录
$ git checkout <commit_from_first_step> //这个步骤我没有做,不知道干嘛用的
$ make goldfish_defconfig
$ make
6.报错信息:
若有报错说找不到 (arm-eabi-gcc command not found)等等,尝试使用http://blog.csdn.net/davidbeckham2901/article/details/7397447 中说到的解决方案即可(即采用另外一个交叉编译器)。
7.测试:
最后,测试一下刚才编译的内核:emulator -avd myavd -kernel ~/goldfish/arch/arm/boot/zImageemulator若系统找不到,可以去android SDK中某文件夹找到,加入系统PATH即可。 -avd后面的参数 myavd即为模拟器的名字,这个我是在eclipse中的模拟器管理中新建的一个模拟器,用那个模拟器的名字即可。 -kernel后面的参数就找到刚才编译出的内核的路径。
若启动模拟器失败,可尝试关闭后再启动。第一次启动模拟器时可能需要等待比较长的时间,3分钟到15分钟不等。
‘贰’ 如何在 Android 源码环境下增大 Linux 内核的 kernel log 的缓存...
需要修改 Linux 内核源码中的一个控制 log buffer size 的宏:CONFIG_LOG_BUF_SHIFT,buffer size 是 2 ^ shift,加大这个就可以。
一、配置
$ make menuconfig
General setup
(18)Kernel log buffer size (16 => 64KB,17 => 128KB)
二、源码
kernel/printk.c
#define __LOG_BUF_LEN (1 << CONFIG_LOG_BUF_SHIFT)
static char __log_buf[__LOG_BUF_LEN];
可以看到,是已经在编译时定死的一块静态空间,不能动态调整了。对于内核日志,唯一可以调整的在:/proc/sys/kernel/printk*
三、限制
init/Kconfig
config LOG_BUF_SHIFT
int "Kernel log buffer size (16 => 64KB, 17 => 128KB)"
range 12 21
default 17
help
Select kernel log buffer size as a power of 2.
Examples:
17 => 128 KB
16 => 64 KB
15 => 32 KB
14 => 16 KB
13 => 8 KB
12 => 4 KB
可以看到 shift 最大值限制到了 21,也就是:2 M
$ echo "(2^21)/1024/1024" | bc
2
如果再要加大,只能改源码了。
‘叁’ RK3288+RTL8201F-VB-CG网卡,在android5.1的3.10kernel上怎么配置
由于在 RK 系列的 SoC 中内置了以太网 MAC 控制器,所以只需要搭配一颗以太网 PHY 芯片, 即可实现以太网卡功能。 按照规范,即使是不同厂家的 PHY,仍然有一部分寄存器的定义是通用的, 只要配置了这些通用的寄存器,基本上 PHY 就可以正常工作。 因此,在 Linux 驱动中有通用的 PHY 驱动,目前的芯片所配套的 SDK 中使用的都是通用驱动,当然 SoC 中的 MAC 驱动是需要实现的。 10/100M 以太网 PHY 与 MAC 之间的接口主要有 MII 和 RMII。 10/100/1000M 以太网 PHY 与 MAC 之间的接口主要有 RGMII。
网卡使用的是RTL8211,和参考设计一致,因此只要配置一下DTS就可以了。
‘肆’ android kernel和标准linux kernel的区别
Android 系统的Kernel 主要增加如下内容“
1. 基于 ARM 架构增加 Gold-Fish 平台 , 相应增加的目录如下 :
kernel/arch/arm/mach-goldfish
kernel/include/asm-arm/arch-goldfish
Gold-Fish 平台采用的是 ARM926T CPU 作为 BaseBand 处理器 , 该 CPU 主频至少为 200MHZ.而要流畅运行Android 系统的CPU 主频至少要在400MHZ 以上,也就是说如果你要上Android 系统,最好是选用基于ARM11 及以上平台进行开发。
2. 增加了 yaffs2 FLASH 文件系统 , 增加的目录为 :kernel/fs/yaffs2
实际上, Android 包经过编译后生成的 system.img 和 ramdisk.img 文件就 yaffs2 格式的包 .
3. 增加了 Android 的相关 Driver, 相应目录为 :
kernel/drivers/android
主要分为 :
Android IPC 系统 : Binder
Android 日志系统 : Logger
Android 电源管理 : Power
Android 闹钟管理 : Alarm
Android 内存控制台 : Ram_console
Android 时钟控制的 gpio: Timed_gpio
4. 增加了 switch 处理 , 相应的目录为 :kernel/drivers/switch/
5. 增加了一种新的共享内存处理方式 , 相应增加的文件为 :kernel/mm/ashmem.c
6. 其他为 Linux-2.6.25 内核所做的补丁等等,例如 BlueTooth,
另外 GoldFish 平台相关的驱动文件如下 :
1. 字符输出设备 :
kernel/drivers/char/goldfish_tty.c
2. 图象显示设备 : (Frame Buffer)
kernel/drivers/video/goldfishfb.c
3. 键盘输入设备 :
kernel/drivers/input/keyboard/goldfish_events.c
4. RTC 设备 : (Real Time Clock)
kernel/drivers/rtc/rtc-goldfish.c
5. USB Device 设备 :
kernel/drivers/usb/gadget/android_adb.c
6. SD 卡设备 :
kernel/drivers/mmc/host/goldfish.c
7. FLASH 设备 :
kernel/drivers/mtd/devices/goldfish_nand.c
kernel/drivers/mtd/devices/goldfish_nand_reg.h
8. LED 设备 :
kernel/drivers/leds/ledtrig-sleep.c
9. 电源设备 :
kernel/drivers/power/goldfish_battery.c
10. 音频设备 :
kernel/arch/arm/mach-goldfish/audio.c
11. 电源管理 :
kernel/arch/arm/mach-goldfish/pm.c
12. 时钟管理 :
kernel/arch/arm/mach-goldfish/timer.c
‘伍’ Android操作系统是基于Linux Kernel是什么意思
每一个操作系统都有不同的内核。像Windows每个版本的内核都不同,而Mac OX用的是Unix的内核,Linux用的是Linux内核。而Android操作系统的内核是Linux,但是他不是一种Linux操作系统。
‘陆’ android kernel menuconfig 有哪些可以打开的选项
ICS/GB版本请在alps代码目录下shell: ./mk ${project name} new /*在配置kernel前先保证new过,如果已经new过可以省却这步。new后会在kenerl目录下生成.config,该文件在make menuconfig会用到,如果不存在.config文件则所有的kernel配置都会恢复成默认的*/ cd kernel /*切换到kernel目录 */ TARGET_PRODUCT=${project name} make menuconfig /*使用menuconfig配置,修改选项后保存退出,此时会在kernel目录下重新生成.config文件 */ 将.config复制到mediatek/config/${project name}/autoconfig/kconfig/目录下并重命名为project 重新new kernel和用./mk bootimage即可下载 ICS2以后的版本请在alps代码目录下shell: ./mk ${project name} new /*在配置kernel前先保证new过,如果已经new过可以省却这步。new后会在kenerl目录下生成.config,该文件在make menuconfig会用到,如果不存在.config文件则所有的kernel配置都会恢复成默认的*/ cd kernel /*切换到kernel目录 */ TARGET_PRODUCT=${project name} make O=out menuconfig /* 如果出现../mediatek/build/kernel/Makefile找不到的错误,请用 TARGET_PRODUCT=${project name} KBUILD_OUTPUT_SUPPORT=yesmake O=out menuconfig 配置完后,new kernel,
‘柒’ 如何编译Android的kernel
1.准备工作: (ubuntu1110 32位)
ubuntu等linuxOS,下载好eclipse,安装好JDK, 安装好android的SDK, 在eclipse中成功打开android 手机模拟器即OK。
2.初始化编译环境 :
关注该网页上的“installing required packages”,其中有的软件包因为版本问题而安装不上,不用管它,之后遇到错误再单独解决。
3.下载内核源码:
android 2.3 内核 下载需要等待一段时间。
4.下载交叉编译器:
该步骤有可能耗费大量时间,依据网速不同,几个小时到几天不等,或许可以尝试git clone 后面的地址只下载prebuilt/linux-x86/toolchain
5.设置参数以及编译:
$ export ARCH=arm
$ export SUBARCH=arm
$ export CROSS_COMPILE=arm-eabi-
$ cd goldfish // 进入下载的源代码目录
$ git checkout <commit_from_first_step> //这个步骤我没有做,不知道干嘛用的
$ make goldfish_defconfig
$ make
6.报错信息:
若有报错说找不到 (arm-eabi-gcc command not found)等等,尝试使用采用另外一个交叉编译器。
7.测试:
最后,测试一下刚才编译的内核:emulator -avd myavd -kernel ~/goldfish/arch/arm/boot/zImageemulator若系统找不到,可以去android SDK中某文件夹找到,加入系统PATH即可。 -avd后面的参数 myavd即为模拟器的名字,这个我是在eclipse中的模拟器管理中新建的一个模拟器,用那个模拟器的名字即可。 -kernel后面的参数就找到刚才编译出的内核的路径。
若启动模拟器失败,可尝试关闭后再启动。第一次启动模拟器时可能需要等待比较长的时间。
‘捌’ 如何向android添加内核驱动模块
1,同目录下的makefile,如
#
# Makefile for instrial I/O Magnetometer sensors
#
obj-$(CONFIG_SENSORS_AK8975) += ak8975.o
obj-$(CONFIG_SENSORS_HMC5843) += hmc5843.o
2,同目录下的kconfig
#
# Magnetometer sensors
#
comment "Magnetometer sensors"
config SENSORS_AK8975
tristate "Asahi Kasei AK8975 3-Axis Magnetometer"
depends on I2C
help
Say yes here to build support for Asahi Kasei AK8975 3-Axis
Magnetometer.
To compile this driver as a mole, choose M here: the mole
will be called ak8975.
3,总的config(配置变量为Y)
各项目配置文件的位置不同,
coffee:kernel/arch/arm/configs/M7023Q-debug-perf_defconfig
juice:common/customer/configs
配置信息如下:
# CONFIG_CFG80211 is not set
CONFIG_EXPERIMENTAL=y
CONFIG_LOCALVERSION="$(KERNEL_LOCAL_VERSION)-perf"
CONFIG_SWAP=y
CONFIG_ZRAM=m
CONFIG_SYSVIPC=y
CONFIG_SENSORS_AK8975=y
......
查看变量是否在编译时配置成功:
out/target/proct/m7023q/obj/KERNEL_OBJ/include/generated/Autoconf.h
查找CONFIG_SENSORS_AK8975
若在编译时有配置成功,将找到这一行:
#define CONFIG_SENSORS_AK8975 1
4、修改板级文件:
4.0及后续项目统一在:kernel/arch/arm/mach-msm/board-qrd7627a.c
注意juice中,很多配置(如tp)写在kernel/arch/arm/mach-msm/board-msm7627a-io.c
在代码中增加新模块的内容,应该有两处,第一处设置函数和结构体,第二处实际调用,注意引用上述第3步新增的编译开关将代码限制起来。
这些内容大多可以拷贝其它模块,但是名字要和driver中的相同,注意要改的地方除了名字之外,还有中断脚和I2C脚。其中固定模块的中断脚大部分时候不会改变(如tp就是int:48,reset:26),除非板子的datasheet特别注明才需要改变。但是I2C脚是会随着slaver device的改变而改变的,需要查清楚。
配置platform_data:
一般需要初始化一个xxx_platform_data结构体(这个结构体的声明应该让驱动文件可视,probe中才知道去读某个platformdata.yyy),并在i2c_board_info结构体中用.platform_data指向它,然后这个i2c_board_info将在板级文件中被注册(作为函数i2c_register_board_info()的参数)。而这个.platform_data很有可能在驱动的probe函数中调用到,例如:
static struct msg2133_ts_platform_data msg2133_platformdata= {
.irq = 0,
.reset = GPIO_TP_RESET,
};
static struct i2c_board_info i2c_info_msg2133_dpt = {
I2C_BOARD_INFO("msg2133", 0x27),
.platform_data = &msg2133_platformdata,
};
i2c_info_msg2133_dpt.platform_data->irq = gpio_to_irq(GPIO_TP_INT);//结构体初始化的时候只能以常量赋值,因为此处需要做GPIO到irq的映射,所以要在此处赋值。
i2c_register_board_info(MSM_GSBI1_QUP_I2C_BUS_ID, &i2c_info_msg2133_dpt, 1);
在驱动的probe中:pdata =client->dev.platform_data;
...... = pdata.yyy; ......//(msg2133_ts_platform_data在该文件中可见)
‘玖’ android开启usb转串口如何配置kernel
1. 如果是linux,不需要单独安装什么串口驱动 2. 但需要使用ls /dev/tty * 查看usb 串口设备是否被检测到 2. 然后使用linux下的MINICOM进行串口信息打印,具体配置和用法可以一下
‘拾’ android 怎样编译kernel 命令 make
方法如下:
在Linux的环境下:
建立目录:
mkdir ~/android-kernel cd android-kernel
下载源代码, 大概有280MB, 慢慢等哈~~~ (当然你要先安装git) git clone git://git.linuxtogo.org/home/groups/mobile-linux/kernel.git
类似的屏幕信息:
Initialized empty Git repository in /home/user/android-kernel/kernel/.git/ remote: Counting objects: 908251, done.
remote: Compressing objects: 100% (153970/153970), done.
remote: Total 908251 (delta 755115), reused 906063 (delta 753016) Receiving objects: 100% (908251/908251), 281.86 MiB | 292 KiB/s, done. Resolving deltas: 100% (755115/755115), done. Checking out files: 100% (22584/22584), done.
然后去到htc-msm branch: cd kernel
git checkout -b htc-msm origin/htc-msm
屏幕信息:
Branch htc-msm set up to track remote branch refs/remotes/origin/htc-msm. Switched to a new branch "htc-msm"
下载ARM的toolchain, 大概64MB左右, 下到~/android-kernel: 下
载
:
http://www.codesourcery.com/gnu_toolchains/arm/portal/package2549/public/arm-none-linux-gnueabi/arm-2008q1-126-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2
cd ~/android-kernel
tar xjf arm-2008q1-126-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2
编译kernel
准备缺省的Kaiser 配置文件.config
cd ~/android-kernel/kernel
make htckaiser_defconfig ARCH=arm
然后编译zImage:
export PATH=~/android-kernel/arm-2008q1/bin:$PATH
make zImage ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi-
编译好的在: ~/android-kernel/kernel/arch/arm/boot/zImage
如果你的机器是多核的, 可以编译的时候用-j <cores/cpus_number>来加速:
比如, 双核的可以:
make -j 2 zImage ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi
满意请采纳谢谢