S3C6410 移植Android 内核移植经验
S3C6410的u-boot移植
u-boot-2012.04移植开发平台:x86 redhat5.5目标平台:SMDK6410 注意:该文档是移植完成之后的总结,所以并非按照真正的移植步骤所写, 只做参考修改完成后运行make进行编译,把编译生成的u-boot-nand.bin烧写到nand的0-0x40000后即可切换为nand启动方式来运行在uboot启动后手动添加环境变量[zhangsan@nand]# set ipaddr 192.168.1.20[zhangsan@nand]# set serverip 192.168.1.254[zhangsan@nand]# set ethaddr 11:22:33:44:55:66这些变量也可在smdk6400.h中以宏的方式定义经测试,nand、tftp等命令都好用,如有问题请发邮箱:lizhiyong_beyond@以下为文件中修改的部分一、修改u-boot-2012.04/arch/arm/cpu/arm1176/start.S在132行添加如下,目的是找到命令段132 .global uboot_cmd_start133 uboot_cmd_start:134 .word __u_boot_cmd_start - _start135 .global uboot_cmd_end136 uboot_cmd_end:137 .word __u_boot_cmd_end - _start注释掉386行,如下@add lr, lr, r9二、修改u-boot-2012.04/arch/arm/lib/board.c在373到375行之间添加如下372 addr -= gd->mon_len;373 //myself374 addr = 0x57e00000;375 //myself376 addr &= ~(4096 - 1);把530到532行修改如下,因为该开发板没有NOR 530 puts("0K");531 //puts(failed);532 //hang();三、修改u-boot-2012.04/arch/arm/lib/eabi_compat.c注释掉第17行如下,该问题以后再解决14int raise (int signum)15 {16 #if !defined(CONFIG_SPL_BUILD) || defined(CONFIG_SPL_LIBCOMMON_SUPPORT)17 // printf("raise: Signal # %d caught\n", signum) ;18 #endif19 return 0;20 }四、修改u-boot-2012.04/board/samsung/smdk6400/lowlevel_init.S把第54到63行删除在第54行到66行添加如下这段代码的目的在于测试程序是否能执行到此,如果能则开发板的四个led都亮55 ldr r0, =0x7f00882056 ldr r1, [r0]57 ldr r2, =0xffff58 bic r1, r1, r259 orr r1, r1, #0x1160 orr r1, r1, #0x110061 str r1, [r0]62 /* LED ALL ON */63 ldr r1, =0x7f00882464 ldr r2, [r1]65 bic r2, r2, #0xf66 str r1, [r2]五、修改u-boot-2012.04/board/samsung/smdk6400/smdk6400.c把board_eth_init函数修改如下,目的在于把DM9000网卡替换CS8900网卡126 int board_eth_init(bd_t *bis)127 {128 int rc = 0;129 #ifdef CONFIG_DM9000130 rc = dm9000_initialize(bis);131 #endif132 #ifdef CONFIG_CS8900133 rc = cs8900_in
Tiny6410_Uboot移植步骤详解
#include <config.h> #include <asm/arch/s3c6400.h>
.globl mem_ctrl_asm_init mem_ctrl_asm_init:
/* DMC1 base address 0x7e001000 */ ldr r0, =ELFIN_DMC1_BASE
ldr r1, =0x4 str r1, [r0, #INDEX_DMC_MEMC_CMD]
ldr r1, =DMC_DDR_REFRESH_PRD str r1, [r0, #INDEX_DMC_REFRESH_PRD]
ldr r1, =DMC_DDR_CAS_LATENCY str r1, [r0, #INDEX_DMC_CAS_LATENCY]
#define SROM_BC1_REG_Tacs #define SROM_BC1_REG_Tcos #define SROM_BC1_REG_Tacc
(0x0) (0x4) (0xE)
// 0clk // 4clk // 14clk
address set-up chip selection set-up access cycle
check_dmc1_ready: ldr r1, [r0, #INDEX_DMC_MEMC_STATUS] mov r2, #0x3 and r1, r1, r2 cmp r1, #0x1 bne check_dmc1_ready
基于S3C6410平台的嵌入式Linux系统LCD驱动模块
基于S3C6410平台的嵌入式Linux系统LCD驱动模块摘 要: 以S3C6410处理器为核心,采用嵌入式Linux操作系统,通过帧缓冲设备的驱动方式,实现了TFT液晶显示器的驱动程序。经过测试字体的放大与旋转及图形的显示,证明该驱动程序稳定,具有很高的实用价值。关键词: 嵌入式Linux;帧缓冲;TFT驱动程序;Platform机制 由于Linux具有开放源码、易于移植、内核可裁剪、资源丰富、免费等优点,使它在嵌入式领域越来越流行。随着手持设备的与日俱增,人机交互界面向着更方便、更直观的方向发展。触摸屏的应用让数据的显示和输入结合为一体,使得人机交互界面更简单、友好,已经广泛应用于嵌入式系统当中。在实际工程中,LCD驱动与触摸驱动是分开的,所以本文只涉及LCD驱动。由于ARM核广泛地应用于嵌入式系统中,所以选用的是基于ARM1176JZF-S核的S3C6410 CPU,其频率可以达到667 MHz,对多媒体的处理速度很快。液晶显示器相对于传统的CRT有很多优点:轻薄、能耗低、辐射少等,市场的占有率也越来越大。LCD有多种类型,比如TN、STN、TFT、LTPS等[1]。TFT型LCD中,晶体管矩阵依显示信号开启或关闭液晶分子的电压,使液晶分子轴转向而成“亮”或“暗”的对比,避免了TN与STN依靠电场效应而造成响应时间长的缺点,而且播放动画或视频不会有STN的拖影现象[2]。背光灯的应用,使其在日光下也能显示图像,应用广泛。LTPS是TFT衍生的新一代技术,价格较贵,所以这里是关于TFT液晶显示器的驱动。1 设备参数及硬件连接1.1 TFT液晶显示屏参数 本文选用的是万鑫的4.3寸的TFT真彩屏,分辨率为480×272,数据格式采用24 bit RGB接口模式,其主要参数如表1所示,参数名后面跟的英文字符串表示在程序中使用的宏。1.2 TFT与S3C6410的硬件连接 一块LCD屏显示图像不仅需要LCD驱动器,还需要LCD控制器。通常LCD驱动器会与LCD玻璃基板制作在一起,而S3C6410内部集成了一个LCD控制器,所以LCD与6410之间可以直接连接。图1显示了LCD液晶显示器与LCD插槽之间的连接,图2显示了LCD插槽与S3C6410之间的连接。VD[0:23]是GRB数据线,VDD_LCD接的是LCD的电源,I2CSDA0背光,VDEN表示数据可以传输颜色数据,其他的与表1的名称对应,其中HSYNC、VSYNC、VDEN、VCLK分别与LHSYNC、LVSYNC、LVDEN、LVCLK连接。2 Platform总线下的LCD驱动2.1 Platform总线简介 在Linux2.6后的设备驱动模型中,总线、设备和驱动这三个实体称之为总线设备驱动模型,即为同类的设备设计了一个框架,而框架的核心层实现了该类设备通用的一些功能,而不用程序员自己再去实现;驱动与设备相分离,使得编写主机控制
S3C2410内核移植实验报告
Kernel内核实验指导
实验环境:
宿主机:RHEL4(Linux vm-dev 2.6.9-42.ELsmp)
目标机:博创经典S2410平台
交叉编译器:arm-linux-gcc V3.4.1
本次实验目录下存放着已经修改好的博创经典2410平台的内核源码包,将该源码包拷贝到宿主机LINUX系统中,解压至本次实验目录,配置编译生成内核uImage文件烧写到ARM设备中。
一、配置、编译内核
1、建立kernel实验目录:
[root@vm-dev ~]# mkdir kernel
2、进入该实验目录,将kernel源码解压至该目录下:
[root@vm-dev ~]# cd kernel/
[root@vm-dev kernel]# ls
linux-2.6.24.4.tar.bz2
[root@vm-dev kernel]# tar -xjvf linux-2.6.24.4.tar.bz2
[root@vm-dev kernel]# ls
linux-2.6.24.4 linux-2.6.24.4.tar.bz2
3、进入解压后的目录linux-2.6.24.4,运行make menuconfig对内核进行配置:
[root@vm-dev kernel]# cd linux-2.6.24.4
[root@vm-dev linux-2.6.24.4]# make menuconfig
3.1 配置系统硬件处理器:
-> System Type
-> S3C2410 Machines
3.2 配置LCD驱动:
安卓系统移植经验之谈,教你三分钟移植
每当我闲下来时不发Rom时,就会整理一下思路,发发教程啥的,我觉得能带动机油们自己打造、改造Rom,共同提升,才是Romer的追求。
发Rom也好,教程也好,我的宗旨是不设回复可见,如果你觉得好,回复或者评分鼓励一下,我就很开心了。
不过这样做的一个遗憾就是,我的帖子通常回复率不够高,沉得快。
好了,闲话少说,上教程。
注:可能你会觉得文字教程比较干枯,不够形象生动,但是请精心看,我会尽量讲得具体、清晰。
首先,我并不算是移植高手,这个教程只是我在自己移植过程中的的一些收获体会,一些经验之谈。
如果你觉得有什么不对或值得改进的地方,欢迎和我交流,我们一起来完善这个教程。
因为移植所涉及的机型、配置相当多变和复杂,所以我无法讲具体细节,只能讲大致的原则。
可以结合我移植U8800+的JoyOS到U8860的例子作为参考进行理解。
我把这些原则抽象出来,命名为Rom移植5步法,具有一定的通用性。
Rom移植的方向有正向和逆向之分:
正向的做法通常就是,找个目标机型的底包,然后把要移植的包的app和framework提取出来替换进去。
这样的优点是改动无需太大,非常快捷;缺点是经常因为一些bin下的程序或者
库文件的差异而导致成功率不够高。
逆向的做法是,拿要移植的包作为底包,把目标机型的内核、wifi驱动、传感器库文件、配置文件等替换进去。
这样做要复杂一些,需要准确两个包的差异,知道应该改哪里;
优点自然是不成则已,一旦移植成功能最大限度地发挥Rom性能,因为框架、程序与底层的契合度要比正向法好。
我这个教程以逆向法为例。
GT8xx多芯片模组应用于Android平台驱动移植说明书V1.5
GT8xx 多芯片模组应用于Android 平台驱动移植说明书V1.5
【程序总揽】
本程序针对Android2.1系统,移植的硬件平台为华天正科技开发的Real6410(基于S3C6410)。本驱动支持多指,通过编译宏开关能够支持三种运行方式;能够在系统支持的情况下在主控进入关屏状态时自动调整GT8XX 工作状态,达到省电的目的。 1.1 系统硬件资源使用 资源类型
GOODIX 演示主控配置 作用
外部中断(可选,建议使用)
硬件IO :S3C64XX_GPL(10)
接收GT8XX 的数据中断,通知系统
运行相应的坐标处理; 在GT8XX 睡眠时用作唤醒管脚 系统中断号:119((外部中断18),触发类型可通过配置信息控制
IO 口(Reset )(可选)
154(S3C64XX_GPF(3)),配置为输出控制
控制GT8XX 运行状态,硬件复位GT8XX (低有效) I2C 适配器(SCL 、SDA )
I2C-0
GT8XX 控制、数据传输
注:如需要支持GT8XX 的睡眠功能,则INT 管脚和Reset 必选其一。 1.2 系统运行流程
为了便于移植,程序中采用了中断、中断+不定时查询和轮询三种方式,程序根据编译宏自动选择方式。以边沿触发中断方式为例,系统的主运行流程如下所示:
1. 创建GT8XX 对应的i2c_client 对象,其中完成了该适配器的相关信息设置(name ,address 等);
2.
加载触摸屏驱动,注意该驱动必须在I2C 总线驱动已经加载的情况下才能进行,否则I2C 通信将出错。程序中将其加载优先级设为最低; 3.
三星S3C6410开发板NFS挂载失败原因
三星S3C6410开发板NFS挂载失败原因
UT-S3C6410开发板NFS挂载失败原因之一在ubuntu下安装、配置NFS服务器的具体步骤如下: 1.安装NFS服务器。ubuntu上默认是没有安装nfs服务器的,因此我们首先安装nfs服务器端,具体命令如下
sudo apt-get install nfs-kernel-server
T-S3C6410开发板NFS挂载失败原因之一在ubuntu下安装、配置NFS服务器的具体步骤如下:
1.安装NFS服务器。ubuntu上默认是没有安装nfs服务器的,因此我们首先安装nfs服务器端,具体命令如下
sudo apt-get install nfs-kernel-server
sudo apt-get install nfs-common
2.NFS挂载目录配置。在/etc/exports末尾处添加如下语句
/home/server_nfs 192.168.0.*(rw,sync,no_roo_squash) [注:/home/server_nfs为NFS服务目录]
保存退出,然后执行下列命令:
sudoexportfs -a
每次修改过/etc/exportfs 后必须执行上面的命令,否则很容易造成NFS挂载失败,各位友坚恒天开发板的用户一定要注意了。
3.重启服务
sudo /etc/init.d/portmap restart
sudo /etc/init.d/nfs-kernel-server restart
4.设置U-boot启动参数,在bootloader命令行下设定
Uboot_for_mini6410_移植步骤详解
这是u-boot-2010.09 针对友善之臂MINI6410移植的最基础版本,只包含了就基本的系统引导,NAND读写,DM9000网卡等等。但是这个足够开发的方便使用。今后会陆续添加原先我为mini2440添加的所有功能。
但是此次移植并非我的功劳,首先基本的移植是由Alex Ling 完成的,你可以在这里看到他提交的补丁,但是编译后无法使用,可能是因为host系统不同,对脚本的解析不同,使得spl部分的生成出现问题,只需修改一下nand_spl目录下目标板目录的中config.mk中的
PAD_TO := $(shell expr $$[$(TEXT_BASE) + 4096])
即可。
DM9000的驱动没有太大的问题(修改了一点可能出现问题的地方,感谢肖工指教),但是原本的u-boot并没有调整所有SROM控制器的配置(其中包括连接DM9000所使用的bank1的总线),我使用了友善带的u-boot的参数配置了一下就好了。
一:/batch.viewlink.php?itemid=1694
ftp://ftp.denx.de/pub/u-boot/
去这2个网站随便下载都可以下载得到最新或者你想要的u-boot。现在我将下载u-boot-2010-09,这个也就是最新的版本啦。
下载后把它解压,然后得到u-boot-2010-09的文件夹,然后进去,并且做下面几件事情:1:进入arch这个文件夹,把出arm外的前部文件夹删掉
2:进入board这个文件夹,把除samsung外前部文件夹删掉
3:进入include/configs,把除smdk6400.h外的所有文件删除。
三星S3C6410用户手册中文版
30 帧/s。 (5)具有 BITBLIT 和轮换的 2D 图形加速。 (6)AC-97 音频编解码器接口和 PCM 串行音频接口。 (7)IIS 和 IIC 接口支持。 (8)专用的 IRDA 端口,用于 FIR,MIR 和 SIR。 (9)灵活配置 GPIO 。 (10)端口 USB 2.0 OTG 支持高速(480 MBPS ,片上收发器) 。 (11)端口 USB 1.1 主设备支持全速(12 MBPS ,片上收发器) 。 (12)高速 MMC / SD 卡支持。 (13)实时时钟,锁相环,具有 PWM 的定时器和看门狗定时器。 (14)32 通道 DMA 控制器。 (15)支持 8X8 键盘矩阵变换电路。 (16)用于移动应用的先进的电源管理。 (17)存储器子系统 具有 8 倍或 16 倍数据总线的 SRAM/ROM/NOR Flash 接口。 具有 16 倍数据总线的 MUXED,ONENAND 接口。 具有 8 倍数据总线的 NANDFlash 接口。 具有 16 倍或 32 倍数据总线的 SDRAM 接口。 具有 16 倍或 32 倍数据总线( 133Mb/s/引脚率)的移动 SDRAM 接口。 具有 16 倍或 32 倍数据总线( 266 Mb/s/引脚 DDR )的移动 DDR 接口。
2.ARM1176JZFARM1176JZF-S 处理器 ARM1176JZF-S 处理器的特性包括: (1)TrustZone™安全扩展。 (2)具有超高速先进的微处理器总线架构(AMBA) 、先进的可扩展接口(AXI)电平,两个接口支持 的优先级顺序多处理机。 (3)8 阶管线。 (4)具有返回堆栈的分支预测。 (5)低中断延时配置。 (6)外部协处理器接口和协处理器 CP14 和 CP15 。
基于S3C6410的U-boot分析与移植
V0 .0 1 2
No 1 .7
电子设计 工程
El cr n c De in En i e rn e to i sg g n e i g
21 0 2年 9月
S p.2 2 e 01
基于 ¥ C 4 0的 Ub o 3 61 .o t分析 与移植
U. o ta ay i a d ta s ln a in b s d o 3 4 O b o n lss n r n p a t t a e n S C6 1 o
Z HOU in c a g IZ e —ig Ja —h n ,L h n xn
(/a nvri co lfI om t nad Tcnqe, unh u5 0 3 ,C ia J nU i s ySh o o n r ai n eh iu G azo 1 62 hn ) n e t f o
C U 速 度 和 时钟 频 率 、 A 初 始 化 、 E 初 始 化 、 关 闭 C U P R M LD P
由 于 B o odr 设 计 依 赖 于 C U 的 体 系 结 构 和 具 体 ot ae 的 l P
B o o d r 文 中分析 了 ub o 的 启 动 流 程 并 详 细 阐述 了将 其 移 植 到 当前 应 用十 分 广 泛 的 基 于 高性 能 处 理 器 A Ml of ae。 l .o t R 1 的 t6 1 q 4 0板 的过 程 .为 从 更 高抽 象层 使 用 目标 板 作 充 分 准 备 。
Tiny-S3C6410_Linux下LED灯驱动移植过程
UT-S3C6410 ARM11 Linux 下的LED驱动
一、实验环境
操作系统:fedora13
交叉编译环境:arm-Linux-gcc 或以上,
6410板子内核源码路径在:忘了,需要厂家给的内核源代码
硬件平台:S3C6410开发板(其他类型的开发板也可以注意配置GPIO)
注:交叉编译环境一定要装好,一般的开发板给的配套资料中都会有,安装过程也都有详细的过程,如果没有,亲,你只有自己解决了。也可以联系我(****************),泪奔支持你们。
二、实验原理
控制LED是最简单的一件事情,就像学C语言时候写的“hello world”程序一样,是一个入门的程序。
首先来了解一下相关的硬件知识:
UT-S3C6410LED原理图
UT-S3C6410LED外部引脚图
从上面的原理图可以得知,LED与CPU引脚的连接方法如下,高电平点亮。
LED1 -GPM0
LED2 -GPM1
LED3 -GPM2
LED4 -GPM3
从数据手册可以找到相应的控制方法。这里我们以LED1为例,介绍一下LED1的操作方法,其他的类似,请大家自行分析。
通过上面可以得知,需要先将GPM0设置为输出方式。将寄存器GPMCON低四位配置成0001。
然后将GPMDAT寄存器的第0位置1灯亮,置LED0灯亮,开发板上有四个LED所以要对GPMDAT的低四位进行操作,就可以实现对灯的亮灭操作了。
三、实验步骤
1、编写驱动程序
mini6410_leds.c
#include
#include
#include
//#include
基于S3C6410处理器的嵌入式Linux系统的构建
2 0 1 3年 第 1 1 期
计 算 机 与 现 代 化 J I S U A N J I Y U X I A N D A I H U A
总第 2 1 9期
文章编号 : 1 0 0 6 - 2 4 7 5 ( 2 0 1 3 ) 1 1 - 0 1 5 5 - 0 3
基于 ¥ 3 C 6 4 1 0处 理 器 的嵌 人 式 L i n u x系统 的构 建
( C o H e g e o f I n f o r m a t i o n S c i e n c e a n d T e c h n o l o g y ,N a n j i n g F o r e s t r y U n i v e r s i t y ,N a n j i n g 2 1 0 0 7 3 ,C h i n a )
Bui l d i n g Em be d de d Li nu x S y s t e m Ba s e d o n S 3 C6 4 1 0 Pr o c e s s o r
嵌入式平台S3C6410的U-Boot分析与移植
嵌入式平台S3C6410的U-Boot分析与移植
董君;倪少权
【期刊名称】《单片机与嵌入式系统应用》
【年(卷),期】2017(17)11
【摘要】In the paper,the U-Boot source code and start process based on S3C6410 embedded platform are analyzed.On the basis,the UBoot software is successfully ported and S3C6410 processor clock initialization,serial communication,memory initialization,MMU initialization and NAND Flash initialization are realized.Through the porting of NAND Flash driver,the read and write NAND Flash and start from NAND Flash are realized.So that the whole system can operate normally.%详细分析基于
S3C6410的嵌入式平台的U-Boot源代码和启动过程.在此基础上成功移植了U-Boot软件,实现了S3C6410处理器时钟初始化、串口通信、内存初始化、MMU 初始化、NAND Flash初始化.通过移植NAND Flash驱动,实现读写NAND Flash 和从NAND Flash启动的功能,使得整个系统能够正常运行.
移植android驱动遇到的一些问题和解决
移植android驱动遇到的一些问题和解决
郑重声明:
(可能有些不是能解决,还请见谅)
1、Q:apt-get: command not found
A:先搞清楚自己用的是啥系统吧,如果是ubuntu或者d ebian,去相应的版块问问题,否则,改用yum,Fed ora里面找不到apt-get不是什么太奇怪的事情。
在Fed ora里正确的安装procinfo的方法就是(首先确保你是超级用户),yum install procinfo。你使用的su -c 'yum install procinfo'是正确的,如果装不上,就把错误信息贴出来。
2、Q:nandflash如何正确分区:
A:(1)MISC分区
其中misc分区信息第一篇文章有解释: 保存设备配置信息:CID (Carrier or Region ID),USB和其它硬件设备配置信息,大约20K的样子。
(2)recovery分区
recovery 分区即恢复分区,在正常分区被破坏后,仍可以进入这一分区进行备份和恢复.我的理解是这个分区保存一个简单的OS或底层软件,在Android的内核被破坏后可以用bootl oad er从这个分区引导进行操作。
(3)boot 分区
一般的嵌入式Linux的设备中.bootload er,内核,根文件系统被分为三个不同分区。在Android做得比较复杂,从这个分区和来看,
这里boot分区是把内核和ramdisk fil e的根文件系统打包在一起了,是编译生成boot.img来烧录的。它有如下格式。
(4)rootfs-combin分区:文件系统分区
Android自动识别内存的大小
Android自动识别内存的大小
1、MINI6410的内存硬件结构与寻址关系
在看过上面的文档之后,相信应该对DDR内存有了一个比较完整的认识和理解,下面我们就来讲讲在MINI6410上的内存硬件结构:
对于MINI6410的设计,用了两块引脚兼容的DDR内存芯片来实现128MB内存和256MB内存可共用一个PCB。
128MB内存使用的是两片K4X51163PG(32Mx16bit),形成一个32M×32bit(128MB)的内存。256MB内存使用的是两片K4X1G163PE(64Mx16bit),形成一个64M×32bit(256MB)的内存。而这两款芯片在引脚上的差别就是K4X51163PG的F7是NC脚,而K4X1G163PE的F7脚是A13。这个F7引脚在128MB内存版本的MINI6410中这个引脚是不连接的,而256MB版本中是通过一个0欧电阻和S3C6410的Xm1ADDR13相连的。
看了这两个内存芯片和S3C6410(DRAM控制器)的数据手册的朋友一定知道,这种连接形成一个这样的寻址关系:
128MB内存版本:Xm1ADDR[15:14](bank):Xm1ADDR[12:0](行地址):Xm1ADDR[9:0](列地址)。一共25根地址线刚好可寻址32M空间。256MB内存版本:Xm1ADDR[15:14](bank):Xm1ADDR[13:0](行地址):Xm1ADDR[9:0](列地址)。一共26根地址线刚好可寻址64M空间。而这两种连接和芯片配置也要通过修改S3C6410的DRAM控制器的两个寄存器的参数来匹配。
wince 6.0 启动过程
以S3C6410为例子,S3C6410的内部SRAM地址为0x0C00 0000 ~ 0x0C00 1FFF,DRAM的Base地址为0x50000000 ,S3C6410支持NAND,SD启动,S3C6410里面有固化的ROM,
当系统上电的时候,将执行固化ROM中的代码,然后检查硬件的GPIO配置,如果配置成NAND 启动,则把NAND的前8K读入内部的SRAM(stepping Stone)中,然后跳转到Stepping Stone的开头,执行Bootloader1 (也就是下文的stepldr), stepldr负责把eboot从NAND 中搬到DRAM中,然后执行eboot( boot loader 2),eboot通过网络下载
NK.bin或者从NAND中把内核搬到DRAM中,然后执行WINCE内核.所以整个启动过程分为三阶段,stepldr -->eboot --> wince kernel .
下面详细地分析各个阶段.
一bootloader 1 stepldr
从stepldr的startup.s开始.startup.s主要是初始化硬件,中断,配置好C运行的环境,然后跳转到main函数中,执行C代码.
startuo.s 的流程是:
startup --> Enable I cache -->关闭watchdog ,Interrupt dosable -> 时钟初始化--> 初始化DRAM控制器--> 初始化IRQ,SVC stack -->
判断是否睡眠---N--> Clear DRAM -->main
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
主要过程:
. 安装lunux 环境
. 安装编译工具
. 下载Linux kernel
. 安装Android SDK
. 获得root file system
. 修改Linux kernel 源码
. 配置Linux kernel
. 修改root file system
. 编译Linux kernel
. 下载kernel Image
1.安装linux 环境
安装Ubuntu Linux 系统,从网站上下载操作系统安装光盘映像,地址:
/ubuntu/releases/8.04/
下载ubuntu-8.04.2-desktop-i386.iso,刻录成光盘安装,安装可以在windows 系统下进行,
选取有15G 空间的硬盘安装,输入用户密码开始安装
这一步结束退出光盘重启进入Ubuntu 系统,完成余下系统安装。
Linux 安装完成,进入Ubuntu 系统,确保电脑连接Internet,安装一些必要软件。
打开终端输入命令框,进行下面的操作:
$ sudo apt-get install ssh
$ sudo apt-get install flex bison gperf libsdl-dev libesd0-dev libwxgtk2.6-dev build-essential zip curl
$ sudo apt-get install valgrind
$ sudo apt-get install sun-java6-jdk
$ sudo apt-get install libncurses5-dev
所有软件系统会自动从网络下载安装,完成后可以开始Android 的移植。
2.安装编译工具
下载:
$ wget
/public/gnu_toolchain/arm-none-linux-gnuea bi/arm-2008q1-126-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2
安装:
$ tar -xjvf
arm-2008q1-126-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2
3.下载Linux kernel
从下面地址获得:
/p/android/downloads/list?can=1&q=&colspec=File name Summary Uploaded Size DownloadCount
Kernel : linux-2.6.23-android-m5-rc14.tar.gz
解压文件
$ tar -xf linux-2.6.23-android-m5-rc14.tar.gz
4.安装Android SDK
从网上下载linux 版本的Android SDK,如下
/android/android-sdk_m5-rc15_linux-x86.zip
下载后解压,获得android-sdk_m5-rc15_linux-x86 文件
5.获得root file system
⑴下载busybox 工具从下面地址
http://benno.id.au/blog/2007/11/14/android-busybox(linux 环境中下载)⑵运行emulator 获取root file system
$ cd <目录>/ android-sdk_m5-rc15_linux-x86/tools
$ ./emulator&
等待emulator 启动,看到出现Android 系统画面,进入菜单ALL/Dev
Tools/Development Settings 下,将Wait for debugger,Show running processes,Show screen updates 这三项打勾,回到命令输入终端。
$ ./adb push
$ ./adb shell
# /data/busybox tar -czf system.tar.gz /system
# /data/busybox tar -czf data.tar.gz /data
# /data/busybox tar -czf etc.tar.gz /etc
# /data/busybox tar -czf sbin.tar.gz /sbin
# exit
$ ./adb pull /system.tar.gz ./
$ ./adb pull /data.tar.gz ./
$ ./adb pull /etc.tar.gz ./
$ ./adb pull /sbin.tar.gz ./
$ ./adb pull /init ./
通过busybox 工具获得了emulator 的文件并打包,下面建立root 文件目录$ mkdir initial_ram_disk
$ cd initial_ram_disk
$ mkdir cache
$ mkdir d
$ mkdir dev
$ mkdir proc
$ mkdir root
$ mkdir sdcard
$ mkdir sys
$ mkdir tmp
$ mkdir var
$ tar -xf
$ tar -xf
$ tar -xf
$ tar -xf
$ cp
包含Android root 文件系统的initial_ram_disk 做好。
6.修改Linux kernel 源码
下载的kernel 文件是不支持smdk6400 开发板的,必须加入smdk6400 的配置文件到kernel 中,同时修改Kconfig 和Makefile 文件。
修改如下:
1> 选择 /arch/arm/mach-s3c2410/Makefile.boot 改为下面内容,
zreladdr-$(CONFIG_PLAT_S3C24XX) := 0x30008000
params_phys-$(CONFIG_PLAT_S3C24XX) := 0x30000100
zreladdr-$(CONFIG_PLAT_S3C64XX) := 0x50008000
params_phys-$(CONFIG_PLAT_S3C64XX) := 0x50000100
2> 从成熟的smdk6400 平台文件中拷贝下面文件到kernel 目录
/arch/arm/mach-s3c6400
/drivers/serial/s3c6400.c
/drivers/input/touchscreen/s3c-ts.c
/drivers/usb/gadget
3> 拷贝/drivers/android/ashmem.c 文件到相应目录下从另外的android kernel (The Android source code for 2.6.23 不包含此文件)
4> 修改相应的Kconfig 和Makefile 文件,使最终能编译到加载的smdk6400 文件。