一、目前進展 1.Android已經可以通過NFS在FS2410開發板上運行 二、目前缺陷 1.觸摸屏沒有校準 2.Android中時鐘停止,結束zygote進程,系統重啟,時鐘更新,但再次停止不動 3.串口無法與GPRS模塊通訊 三、移植步驟 一、移植Android內核到FS2410開發板上 1、下載linux-2.6.25-android-1.0_r1.tar.gz 2、將內核解壓到用戶目錄,如/home/wangan/kernel.git 3、進入kernel.git文件夾,如cd "/kernel.git/ 4、修改arch/arm/plat-s3c24xx/common-smdk.c文件中的nand flash分區設置,如gedit arch/arm/plat-s3c24xx/common-smdk.c 修改static struct mtd_partition smdk_default_nand_part[]結構體為: static struct mtd_partition smdk_default_nand_part[] = { [0] = { .name = "Boot Agent", .size = SZ_256K, .offset = 0, }, = { .name = "Linux Kernel", .offset = SZ_256K, .size = SZ_2M - SZ_256K, }, = { .name = "File System", .offset = SZ_2M, .size = SZ_32M - SZ_2M, }, = { .name = "Other", .offset = SZ_32M, .size = SZ_32M, } }; 5、在網站上下載IA32 GNU/Linux TAR。 6、將文件解壓到用戶目錄,如/home/wangan/arm-2008q3 7、進入arm-2008q3/bin文件夾,如cd "/arm-2008q3/bin/ 8、添加當前路徑進入環境變量,如export PATH=$PWD:$PATH,或修改"/.bashrc文件并重新登錄 9、進入內核文件夾,如cd "/kernel.git/ 10、修改Makefile文件,如gedit Makefile 更改ARCH和CROSS_COMPILE #ARCH ?= $(SUBARCH) ARCH ?= arm #CROSS_COMPILE ?= arm-eabi- CROSS_COMPILE ?= arm-none-eabi- 11、從華清遠見Linux-2.6.8.1內核壓縮包中提取.config文件(注意:config前面有個“.”)放入kernel.git文件夾 12、運行make menuconfig (1) 確保System Type ---> ARM system type ()中的內容為Samsung S3C2410, S3C2412, S3C2413, S3C2440, S3C2442, S3C2443 (2) 確保System Type ---> S3C2410 Machines ---> SMDK2410/A9M2410被勾選 (3) 取消選擇與Goldfish相關的內容 Device Drivers ---> Character devices ---> < > Goldfish TTY Driver Device Drivers ---> Power supply class support ---> < > Goldfish battery driver (NEW) Device Drivers ---> Real Time Clock ---> < > GOLDFISH (NEW) Device Drivers ---> Graphics support ---> Support for frame buffer devices ---> < > Goldfish Framebuffer (4) 選擇S3C2410 LCD相關的內容 Device Drivers ---> Graphics support ---> Support for frame buffer devices ---> <*> S3C2410 LCD framebuffer support Device Drivers ---> Graphics support ---> Bootup logo ---> Standard black and white Linux logo Device Drivers ---> Graphics support ---> Bootup logo ---> Standard 16-color Linux logo Device Drivers ---> Graphics support ---> Bootup logo ---> Standard 224-color Linux logo (5) 選中Android內核必須選項 Kernel Features ---> Use the ARM EABI to compile the kernel General setup ---> Use full shmem filesystem General setup ---> Enable Android's Shared Memory Subsystem System Type ---> Support Thumb user binaries Device Drivers ---> Android ---> Android log driver Device Drivers ---> Android ---> <*> Binder IPC Driver (6) 盡量選中Android內核可選選項 Device Drivers ---> Android ---> RAM buffer console Device Drivers ---> Android ---> Android timed gpio driver Device Drivers ---> Android ---> Only allow certain groups to create sockets (7) 其余CONFIG選項,如系統支持請一并選擇 CONFIG_ANDROID_POWER =y CONFIG_ANDROID_POWER_STAT =y CONFIG_ANDROID_POWER_ALARM =y (可以在Kconfig文件中查找ANDROID_POWER等字段進行選擇,或者直接修改.config文件) 13、退出并保存.config 二、移植LCD驅動到Linux-2.6.25內核 1、 進入kernel.git文件夾,如cd "/kernel.git/ 2、 修改arch/arm/mach-s3c2410/mach-smdk2410.c文件,如gedit arch/arm/mach-s3c2410/mach-smdk2410.c (1) 增加頭文件#include <asm/arch/fb.h> (2) 增加兩給結構體 static struct s3c2410fb_display smdk2410_lcd_cfg __initdata = { .lcdcon5 = S3C2410_LCDCON5_FRM565 | S3C2410_LCDCON5_INVVLINE | S3C2410_LCDCON5_INVVFRAME | S3C2410_LCDCON5_PWREN | S3C2410_LCDCON5_HWSWP, .type = S3C2410_LCDCON1_TFT, .width = 320, .height = 240, .pixclock = 174757, .xres = 320, .yres = 240, .bpp = 16, .left_margin = 16, .right_margin = 59, .hsync_len = 9, .upper_margin = 2, .lower_margin = 6, .vsync_len = 16, }; static struct s3c2410fb_mach_info smdk2410_fb_info __initdata = { .displays = &smdk2410_lcd_cfg, .num_displays = 1, .default_display = 0, .gpccon = 0xaa955699, .gpccon_mask = 0xffc003cc, .gpcup = 0x0000ffff, .gpcup_mask = 0xffffffff, .gpdcon = 0xaa95aaa1, .gpdcon_mask = 0xffc0fff0, .gpdup = 0x0000faff, .gpdup_mask = 0xffffffff, .lpcsel = 0xf82, }; (3) 在smdk2410_init()函數中增加s3c24xx_fb_set_platdata(&smdk2410_fb_info); 三、移植觸摸屏驅動到Linux-2.6.25內核(參見《基于linux-2.26.5內核的FS2410開發板觸摸屏驅動移植》)并制作zImage文件,如make 這里提一下,確保已經勾選Device Drivers ---> Input device support ---> <*> Event interface,本人曾經在這里徘徊,感謝游老師悉心教誨! 四、制作支持ARMv4的Android根文件系統 1、從下載Android的ARMv4版本根文件 2、在/dev下增加null和console兩個設備節點 mknod -m 660 null c 1 3 mknod -m 660 console c 5 1 3、在U-boot中修改啟動參數init為/init,完整的命令行如:root=nfs nfsroot=169.254.7.118:/source/rootfs ip=169.254.7.119 console=ttySAC0,115200 init=/init 4、修改/init.rc文件,去除除mount tmpfs tmpfs /sqlite_stmt_journals size=4m之外的所有mount命令 系統制作完成,現在應該可以看到漂亮的大表了。首次啟動需要創建文件,大約17分鐘。然后每次啟動只需要2分鐘。 |