最近在做一个Android for Linux内核的移植,预备其移植到S3C2440中。在网上大都遇到移植的都是S3C2410,就算是有S3C2440的,也都没能把一切的东西翔实阐明一下,仅仅你看看我的移植,我看看你的移植。有的当地不对的。也没有做深化的研讨。比如说在内核的装备上。许多网友们都提出来在装备内核的时分要选上:
要挑选上S3C2410这个选项。说是假如不挑选这个,编译会犯错、或许不通过。但是我们有没有考虑这是为什么?我要做的是S3C2440的我为什么要挑选2410的啊~带着这个疑问。我将其本源找到~~下面带我们来瞧瞧这个东西。
在发动代码我用的是uboot,在进行传参数给内核的时分,会把cpu的ID 传递给内核。但是在uboot中这个ID 是由uboot编译的时分主动生成的。我觉得这个ID仍是能够更改的,现在不预备持续研讨这个问题。这儿假设是固定生成的!
S3C2410的ID是0xc1 s3c2440的ID是0x7cf(这儿我要阐明一下,我在发动内核的时分上面显现的是这个,有的是0x16A)
这样需求在内核文件的arch/arm/kernel/head.S文件中做一个修正:
假如是S3C2410 那么需求增加的是
mov r1,#0xc1
假如要是S3C2440的话,你要是增加mov r1,0x7cf那么编译会报错。
下面需求让你填写的要多一条句子,因为mov指令只能传递char型的也便是8位二进制数
所以这儿稍有不同:
mov r1,0xcf
orr r1, r1,#0x700
这样既可,这样发动的时分就不会停留在:
Uncompressing Linux………………………………………………………………………………………………………………….. done, booting the kernel.
这样你所增加的程序驱动都能够增加到/arch/arm/mach-s3c2440/mach-smdk2440.c这儿了。之前我选S3C2410的时分我还需求向/arch/arm/mach-s3c2410/mach-smdk2410.c这儿进行增加。费事的要命。
这样就能够了~~~~