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
滿意請採納謝謝