【Android源码 栏目提醒】:本文主要为网学会员提供“Android在天嵌2440上的移植 - 计算机教材”,希望对需要Android在天嵌2440上的移植 - 计算机教材网友有所帮助,学习一下!
一、移植基本环境 我用的还是win的平台所以使用了虚拟机Vmware workstation 6.5.0 ubuntu9.10 交叉编译工具包EABI——4.3.3 做好的镜像都是在win平台上使用串口烧录的用到软件DNM启动之类的都用超级终端进行控制。
提示TQ2440所附带的光盘中有很多有用的东西建议大家看一下所用的工具除了虚拟机及平台几乎都可以找到。
在进行正式的
android系统移植时可以按照光盘中附带的“linux系统移植 step by step”这个pdf来做一下linux的移植基本上的步骤都差不多了解一下我们要做什么。
接下来找一些文件了解一下
android的系统架构、内核构成。
以上就是前期工作。
二、具体移植步骤 经过分析 我们知道 所需完成的步骤共有三步内核移植、驱动移植、文件系统移植。
1.移植
Android内核 1、解压内核代码androidkernel.rar 到虚拟机的目录下比/opt/Embedsky/androidkernel.git 2、进入androidkernel.git文件夹如cd /opt/Embedsky/androidkernel.git/ 3、修改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 quotEmbedSky_Board_ubootquot .offset 0x00000000 .size 0x00040000 1 .name quotEmbedSky_Board_kernelquot .offset 0x00200000 .size 0x00200000 2 .name quotEmbedSky_Board_yaffs2quot .offset 0x00400000 .size 0x0FB80000 4、将交叉编译工具链的压缩文件EABI_4.3.3_Embedsky_20090807.tar.bz2文件解压 5、进入/opt/EmbedSky/4.3.4/文件夹 6、添加当前路径进入环境变量如export PATHPWD:PATH或修改/.bashrc文件并重新登录 7、进入内核文件夹如cd /opt/Embedsky/androidkernel.git/ 8、修改Makefile文件如gedit Makefile 更改ARCH和CROSS_COMPILE ARCH arm CROSS_COMPILE arm-linux- 9、使用make s3c2410_defconfig默认配置2410内核 10、运行make menuconfig a、确保System Type ---gt ARM system type 中的内容为Samsung S3C2410 S3C2412 S3C2413 S3C2440 S3C2442 S3C2443 b、确保System Type ---gt S3C2410 Machines ---gt SMDK2410/A9M2410被勾选 c、取消选择与Goldfish相关的内容 Device Drivers ---gt Character devices ---gt lt gt Goldfish TTY Driver Device Drivers ---gt Power supply class support ---gt lt gt Goldfish battery driver NEW Device Drivers ---gt Real Time Clock ---gt lt gt GOLDFISH NEW Device Drivers ---gt Graphics support ---gt Support for frame buffer devices ---gt lt gt Goldfish Framebuffer d、选择S3C2410 LCD相关的内容 Device Drivers ---gt Graphics support ---gt Support for frame buffer devices ---gt ltgt S3C2410 LCD framebuffer support Device Drivers ---gt Graphics support ---gt Bootup logo ---gt Standard black and white Linux logo Device Drivers ---gt Graphics support ---gt Bootup logo ---gt Standard 16-color Linux logo Device Drivers ---gt Graphics support ---gt Bootup logo ---gt Standard 224-color Linux logo e、选中
Android内核必须选项 Kernel Features ---gt Use the ARM EABI to compile the kernel General setup ---gt Use full shmem filesystem General setup ---gt Enable Androids Shared Memory Subsystem System Type ---gt Support Thumb user binaries Device Drivers ---gt
Android ---gt
Android log driver Device Drivers ---gt
Android ---gt ltgt Binder IPC Driver f、尽量选中
Android内核可选选项 Device Drivers ---gt
Android ---gt RAM buffer console Device Drivers ---gt
Android ---gt
Android timed gpio driver Device Drivers ---gt
Android ---gt Only allow certain groups to create sockets g、其余CONFIG选项如系统支持请一并选择 CONFIG_
ANDROID_POWER y CONFIG_
ANDROID_POWER_STAT y CONFIG_
ANDROID_POWER_ALARM y 可以在Kconfig文件中查找
ANDROID_POWER等字段进行选择或者直接修改.config文件 11、退出并保存.config 提示有时软件安装错误会导致无法找到makefile在make menuconfig时有时会因为各种库没安装而出现错误我们要根据所提示的错误 sudo apt-get install …… 来安装所缺库。
三、驱动部分移植 只提供最基本的几个驱动移植方法谨保证
android可以跑起来。
键盘驱动、sd卡驱动等移植基本上大同小异不懂的参考linux的驱动移植。
LCD驱动EmbedSky 1、参数配置 修改 “ drivers/video/s3c2410fb.c ”文件修改 370 行开始的函数 内容如下红色部分 static void s3c2410fb_activate_varstruct fb_info info struct s3c2410fb_info fbi info-gtpar void __iomem regs fbi-gtio int type fbi-gtregs.lcdcon1 amp S3C2410_LCDCON1_TFT struct fb_var_screeninfo var ampinfo-gtvar struct s3c2410fb_mach_info mach_info fbi-gtdev-gtplatform_data struct s3c2410fb_display default_display mach_info-gtdisplays mach_info-gtdefault_display int clkdiv s3c2410fb_calc_pixclkfbi var-gtpixclock / 2 dprintkquots: var-gtxres dnquot __FUNCTION__ var-gtxres dprintkquots: var-gtyres dnquot __FUNCTION__ var-gtyres dprintkquots: var-gtbpp dnquot __FUNCTION__ var-gtbits_per_pixel if type S3C2410_LCDCON1_TFT s3c2410fb_calculate_tft_lcd_regsinfo ampfbi-gtregs --clkdiv if clkdiv lt 0 clkdiv 0 else s3c2410fb_calculate_stn_lcd_regsinfo ampfbi-gtregs if clkdiv lt 2 clkdiv 2 // fbi-gtregs.lcdcon1 S3C2410_LCDCON1_CLKVALclkdiv fbi-gtregs.lcdcon1 S3C2410_LCDCON1_CLKVALdefault_display-gtsetclkval / write new registers / 2、完成了这部分修改之后我们在 s3c2410fb_display 结构体中添加了一个 setclkval 的变量那么我们需要在该结构体的原型中添加上该变量修改 “ arch/arm/mach-s3c2410/include/mach/fb.h ” 文件在 40 行添加如下内容红色部分所示 / LCD description / struct s3c2410fb_display / LCD type / unsigned type / Screen size / unsigned short width unsigned short height / Screen info / unsigned short xres unsigned short yres unsigned short bpp unsigned pixclock / pixclock in picoseconds / unsigned setclkval / clkval / unsigned short left_margin / value in pixels TFT or HCLKs STN / unsigned short right_margin / value in pixels TFT or HCLKs STN / unsigned short hsync_len / value in pixels TFT or HCLKs STN / unsigned short upper_margin / value in lines TFT or 0 STN / unsigned short lower_margin / value in lines TFT or 0 STN / unsigned short vsync_len / value in lines TFT or 0 STN / / lcd configuration registers / unsigned long lcdcon5 3、修改 LCD 参数设置 然后我们修改 LCD 各个参数的配置该配置参数在 “arch/arm/mach-s3c2440/mach-smdk2440.c”文件中的由 107 行开始的结构体中然后将其改为如下内容即可红色部分就是修改的内容注意添加上刚刚添加的那个变量 setclkval的赋值 / LCD driver info / static struct s3c2410fb_display smdk2440_lcd_cfg __initdata .lcdcon5 S3C2410_LCDCON5_FRM565 S3C2410_LCDCON5_INVVLINE S3C2410_LCDCON5_INVVFRAME S3C2410_LCDCON5_PWREN S3C2410_LCDCON5_HWSWP .type S3C2410_LCDCON1_TFT .width 240 .height 320 .pixclock 166667 .xres 240 .yres 320 .bpp 16 .left_margin 20 .right_margin 8 .hsync_len 4 .upper_margin 8 .lower_margin 7 .vsync_len 4 static struct s3c2410fb_mach_info smdk2440_fb_info __initdata .displays ampsmdk2440_lcd_cfg .num_displays 1 .default_display 0 if 0 / currently setup by downloader / .gpccon 0xaa940659 .gpccon_mask 0xffffffff .gpcup 0x0000ffff .gpcup_mask 0xffffffff .gpdcon 0xaa84aaa0 .gpdcon_mask 0xffffffff .gpdup 0x0000faff .gpdup_mask 0xffffffff endif // .lpcsel 0xCE6 amp 7 1ltlt4 4、然后修改 “drivers/ video /Kconfig”文件把从 1798 到 1819 行的内容改成如下所示 config FB_S3C24X0 tristate quotS3C24X0 LCD framebuffer supportquot depends on FB ampamp ARCH_S3C2410 select FB_CFB_FILLRECT select FB_CFB_COPYAREA select FB_CFB_IMAGEBLIT ---help--- Frame buffer driver for the built-in LCD controller in the Samsung S3C2410 processor. This driver is also available as a module code which can be inserted and removed from the running kernel whenever you want. The module will be called s3c2410fb. If you want to compile it as a module say M here and read ltfileocumentation/kbuild/modules.txtgt. If unsure say N. choice prompt quotLCD selectquot depends on FB_S3C24X0 help S3C24x0 LCD size select config FB_S3C24X0_S320240 boolean quot3.5 inch 320x240 Samsung LCDquot depends on FB_S3C24X0 help 3.5 inch 320x240 Samsumg LCD config FB_S3C24X0_W320240 boolean quot3.5 inch 320x240 WanXin LCDquot depends on FB_S3C24X0 help 3.5 inch 320x240 WanXin LCD config FB_S3C24X0_T240320 boolean quot3.5 inch 240X320 Toshiba LCDquot depends on FB_S3C24X0 help 3.5 inch 240x320 Toshiba LCD config FB_S3C24X0_TFT480272 boolean quot4.3 inch 480X272 TFT LCDquot depends on FB_S3C24X0 help 4.3 inch 480X272 TFT LCD config FB_S3C24X0_TFT640480 boolean quotVGA 640x480quot depends on FB_S3C24X0 help VGA 640x480 config FB_S3C24X0_TFT800480 boolean quot7 inch 800x480 LCDquot depends on FB_S3C24X0 help 7 inch 800x480 LCD config FB_S3C24X0_TFT800600 boolean quot10.4 inch 800x600 TFT LCDquot depends on FB_S3C24X0 help 10.4 inch 800x480 TFT LCD Endchoice config FB_S3C2410_DEBUG bool quotS3C2410 lcd debug messagesquot depends on FB_S3C24X0 help Turn on debugging messages. Note that you can set/unset at run time through sysfs 5、然后修改 “drivers/ video /Makefile”文件把 109 行的内容改成如下所示 obj-CONFIG_FB_MAXINE maxinefb.o obj-CONFIG_FB_METRONOME metronomefb.o obj-CONFIG_FB_S1D13XXX s1d13xxxfb.o obj-CONFIG_FB_IMX imxfb.o obj-CONFIG_FB_S3C24 X 0 s3c2410fb.o obj-CONFIG_FB_PNX4008_DUM pnx4008/ obj-CONFIG_FB_PNX4008_DUM_RGB pnx4008/ obj-CONFIG_FB_IBM_GXT4500 gxt4500.o obj-CONFIG_FB_PS3 ps3fb.o obj-CONFIG_FB_SM501 sm501fb.o obj-CONFIG_FB_XILINX xilinxfb.o 6、配置内核: 做完以上的这些操作之后我们就可以对 LCD 进行配置了输入 make menuconfig 进入配置单然后进行如下配置 Device Drivers ---gt Graphics support ---gt ltgt Support for frame buffer devices ---gt Enable firmware EDID Enable Video Mode Handling Helpers Frame buffer hardware drivers ltgt S3C24X0 LCD framebuffer support LCD select 3.5 inch 320x240 WanXin LCD ---gt ltgt Framebuffer Console support Bootup logo ---gt Standard 224-color Linux logo 在 “LCD select 3.5 inch 320x240 WanXin LCD” 这个选项这里选择LCD 类型下面就是进入该配置选项出现的对话框的情况有“ X ”的是表示选中的 X 3.5 inch 320x240 WanXin LCD 7、然后进入 “ Bootup logo ” 选项的配置单我们只需要选择是 224 色的就行了。
配置完毕后编译出内核镜像烧写到 TQ2440开发板中启动系统时就可以看到开机 logo的画面这就表明LCD驱动完成了。
触摸屏驱动EmbedSky 第一、添加触摸驱动补丁 1、在 2.6.29.3 的内核里面是没有针对S3C2440的触摸驱动的这里我们对其打上触摸的驱动补丁首先复制我们准备好的触摸驱动
源码名为EmbedSky_ts.c到内核
源码的 “drivers/input/touchscreen/ ”目录下和触摸驱动的头文件名为 ts.h到内核
源码的 “include/asm-arm/arch-s3c2410”目录下添加 “clock.h”文件到内核
源码的 “include/asm-arm/hardware/”目录下。
2、然后修改 “drivers/input/touchscreen/ ”目录下面的 “Kconfig”和 “Makefile”文件以支持对刚刚添 加的文件的支持。
修改内核
源码的 “ drivers/input/touchscreen/ ” 目录下面的 “Kconfig ” 文件在文件的最后添加如下内容 config TOUCHSCREEN_USB_GOTOP default y bool quotGoTop Super_Q2/GogoPen/PenPower tablet device supportquot if EMBEDDED depends on TOUCHSCREEN_USB_COMPOSITE config EmbedSky_TOUCHSCREEN tristate quotEmbedSky touchscreenquot depends on ARCH_S3C2410 ampamp INPUT ampamp INPUT_TOUCHSCREEN select SERIO help To compile this driver as a module choose M here: the module will be called EmbedSky_ts.ko. config TOUCHSCREEN_EmbedSky_DEBUG boolean quotEmbedSky touchscreen debug messagesquot depends on EmbedSky_TOUCHSCREEN help Select this if you want debug messages endif 3、修改同目录下的 “Makefile”文件在文件的最后添加如下内容红色部分所示 Makefile for the touchscreen drivers. Each configuration option enables a list of files. obj-CONFIG_TOUCHSCREEN_ADS7846 ads7846.o obj-CONFIG_TOUCHSCREEN_BITSY h3600_ts_input.o obj-CONFIG_TOUCHSCREEN_CORGI corgi_ts.o obj-CONFIG_TOUCHSCREEN_GUNZE gunze.o obj-CONFIG_TOUCHSCREEN_ELO elo.o obj-CONFIG_TOUCHSCREEN_FUJITSU fujitsu_ts.o obj-CONFIG_TOUCHSCREEN_MTOUCH mtouch.o obj-CONFIG_TOUCHSCREEN_MK712 mk712.o obj-CONFIG_TOUCHSCREEN_HP600 hp680_ts_input.o obj-CONFIG_TOUCHSCREEN_HP7XX jornada720_ts.o obj-CONFIG_TOUCHSCREEN_USB_COMPOSITE usbtouchscreen.o obj-CONFIG_TOUCHSCREEN_PENMOUNT penmount.o obj-CONFIG_TOUCHSCREEN_TOUCHRIGHT touchright.o obj-CONFIG_TOUCHSCREEN_TOUCHWIN touchwin.o obj-CONFIG_TOUCHSCREEN_UCB1400 ucb1400_ts.o obj-CONFIG_ EmbedSky_TOUCHSCREEN EmbedSky_ts.o 4、然后在 “include/linux/interrupt.h ” 文件中的 58 行添加如下内容用以支持 EmbedSky_ts.c
源码中的SA_SAMPLE_RANDOM 中断 define IRQF_DISABLED 0x00000020 define IRQF_SAMPLE_RANDOM 0x00000040 define IRQF_SHARED 0x00000080 define IRQF_PROBE_SHARED 0x00000100 define IRQF_TIMER 0x00000200 define IRQF_PERCPU 0x00000400 define IRQF_NOBALANCING 0x00000800 define IRQF_IRQPOLL 0x00001000 static inline unsigned long __deprecated deprecated_irq_flagunsigned long flag return flag define SA_INTERRUPT deprecated_irq_flagIRQF_DISABLED define SA_SAMPLE_RANDOM deprecated_irq_flagIRQF_SAMPLE_RANDOM define SA_SHIRQ deprecated_irq_flagIRQF_SHARED define SA_PROBEIRQ deprecated_irq_flagIRQF_PROBE_SHARED define SA_PERCPU deprecated_irq_flagIRQF_PERCPU define SA_TRIGGER_LOW deprecated_irq_flagIRQF_TRIGGER_LOW define SA_TRIGGER_HIGH deprecated_irq_flagIRQF_TRIGGER_HIGH define SA_TRIGGER_FALLING deprecated_irq_flagIRQF_TRIGGER_FALLING define SA_TRIGGER_RISING deprecated_irq_flagIRQF_TRIGGER_RISING define SA_TRIGGER_MASK deprecated_irq_flagIRQF_TRIGGER_MASK typedef irqreturn_t irq_handler_tint void 5、打好了触摸驱动的补丁后还需要添加触摸屏设备和配置信息。
修改内核
源码的 “arch/arm/mach-s3c2440/mach-smdk2440.c”文件在41行添加上对触摸驱动头文件的调用内容如下 include ltasm/plat-s3c/regs-serial.hgt include ltasm/arch/regs-gpio.hgt include ltasm/arch/regs-lcd.hgt include ltasm/arch/idle.hgt include ltasm/arch/fb.hgt include ltasm/arch/ts.hgt include ltasm/plat-s3c24xx/s3c2410.hgt include ltasm/plat-s3c24xx/s3c2440.hgt include ltasm/plat-s3c24xx/clock.hgt include ltasm/plat-s3c24xx/devs.hgt include ltasm/plat-s3c24xx/cpu.hgt 在153 行开始添加内容如下红色部分所示 //touch screen struct platform_device s3c_device_ts .name quot EmbedSky -tsquot .id -1 static struct EmbedSky_ts_mach_info EmbedSky_ts_info .delay 10000 .presc 49 .oversampling_shift 2 static struct platform_device smdk2440_devices __initdata amps3c_device_usb amps3c_device_lcd amps3c_device_wdt amps3c_device_i2c amps3c_device_iis amps3c_device_ts static void __init smdk2440_map_iovoid s3c24xx_init_iosmdk2440_iodesc ARRAY_SIZEsmdk2440_iodesc s3c24xx_init_clocks12000000 s3c24xx_init_uartssmdk2440_uartcfgs ARRAY_SIZEsmdk2440_uartcfgs static void __init smdk2440_machine_initvoid s3c24xx_fb_set_platdataampsmdk2440_fb_info s3c_device_ts.dev.platform_data amp EmbedSky_ts_info platform_add_devicessmdk2440_devices ARRAY_SIZEsmdk2440_devices smdk_machine_init s3c2410_gpio_setpinS3C2410_GPG12 0 s3c2410_gpio_cfgpinS3C2410_GPG12 S3C2410_GPIO_OUTPUT s3c24xx_udc_set_platdataampwhizer_udc_cfg 第二、添加TSDEV的补丁 1、然后再打上TSDEV设备的补丁复制补丁文件 “tsdev.c ”到内核
源码的 “drivers/input/” 目录下面然后修改同目录下的 “ Kconfig ” 和 “ Makefile ” 文件。
修改内核
源码 “drivers/input/”目录下的 “Kconfig ”文件在117行添加如下内容红色部分所示 config INPUT_TSDEV tristate quotTouchscreen interfacequot ---help--- Say Y here if you have an application that only can understand the Compaq touchscreen protocol for absolute pointer data. This is useful namely for embedded configurations. If unsure say N. To compile this driver as a module choose M here: the module will be called tsdev. config INPUT_TSDEV_SCREEN_X int quotHorizontal screen resolutionquot depends on INPUT_TSDEV default quot320quot config INPUT_TSDEV_SCREEN_Y int quotVertical screen resolutionquot depends on INPUT_TSDEV default quot240quot config INPUT_EVDEV tristate quotEvent interfacequot help Say Y here if you want your input device events be accessible under char device 13:64 - /dev/input/eventX in a generic way. To compile this driver as a module choose M here: the module will be called evdev. 2、修改同目录下的 “ Makefile ” 文件在 16 行添加如下内容红色部分所示 Makefile for the input core drivers. Each configuration option enables a list of files. obj-CONFIG_INPUT input-core.o input-core-objs : input.o ff-core.o obj-CONFIG_INPUT_FF_MEMLESS ff-memless.o obj-CONFIG_INPUT_POLLDEV input-polldev.o obj-CONFIG_INPUT_MOUSEDEV mousedev.o.
上一篇:
Android_手机编译环境及相关
下一篇:
7*30m公路预应力混凝土连续梁桥上部结构设计