qt210 内核移植,学习笔记

config 种选中powver manager 里面的内容
修改 一个config
vi arch/arm/plat-samsung/Makefile
注释 #obj-$(CONFIG_SAMSUNG_DEV_ADC)  += dev-adc.o

增加 MACHINE_START 里面增加一段
fixup 的代码。主要是初始化变量。pm_debug_scratchpad = ram_console_start + ram_console_size;

smdkv210.c 增加了 两个 include 文件,和一个函数

#include <mach/gpio.h>
#include <mach/gpio-herring.h>
s3c_setup_uart_cfg_gpio(unsigned char port)
-------------------------------------------------------
至此能编译成功,并有打印信息。
以上基于samsung android 2.6.35 的内核,只是编译成功,但是开发板上运行是异常的。
















另外发现了一处 samsung 的内核,在 www.kernel.org 官方网站上找到的。
git 地址:git://git.kernel.org/pub/scm/linux/kernel/git/kgene/linux-samsung.git
使用的分支 是 v3.5-next/cleanup-plat-s5p
这是一个3.4的内核,编译的配置使用s5pv210_defconfig.
make ARCH=arm s5pv210_defconfig
make -j2 uImage ARCH=arm CROSS_COMPILE=arm-linux-gnueabi-
能够正常的编译通过,只是修改了 配置文件种串口的端口就可以了,但是启动之后,不能挂载 root ,总是报错,目前不清楚是什么错。但是比以前进步了许多的。

终于差清楚了问题,问题出在了 arch/arm/mach-s5pv210/Makefile.boot 的文件,这个文件种写了两个地址,一个是内核启动地址,一个是uboot参数的写入地址,uboot将参数写如了 30000100 的地址,而默认的地址是20000100,所以读取不到启动参数,只要修改了这个,就可以了,内核的加载地址也放在了30008000的地址,就可以正常读取uboot的参数了,可以正常启动文件系统了。

总结:
不抛弃不放弃,慢慢做,一定能成功的。









在挂载Android ramdisk 时要挂载很多驱动,否则启动不正常。
手下是按照出厂所代的哪个CONFIG ,配置了网络支持,network support ,结果就不再报错Address Family not support 的支持了。
但是出现了MTD 信息不能挂载的错误。主要是Nand 上的文件没有读取出来。现在追查是drivers mtd nand 的配置有错误,都配置了,但是发现少了一些选项,追查文件,是没有添加PCI 的支持,也就是在arch/arm/Kconfig 种的文件 没其作用,这个文件种配置了 CONFIG PCI ,但是到了drivers/mtd/nand/Kconfig 却没有解析到PCI 这个东西,导致一些配置不其作用。明天继续追查如何让CONFIG PCI 起作用。


经过验证,和CONFIG_PCI 没有什么关系,不用关心它







添加Nand驱动的支持,不是个简单的事情。
移植Nand 的驱动,首先要移植 drivers/mtd/nand/下面的文件,也就是platform-driver ,其次还要添加platform_device ,也就是生命结构体,而且结构提声明种的name 应该完全一样,否则不能启动。
具体的可以参照:http://blog.csdn.net/f22jay/article/details/7856598
写的很详细,而且是针对S5PV210的,用途很大。
现在遇到的问题是nand 的时钟不对。

解决了Clock的问题了。
虽然不清楚原理,但是其实质就是在arch/arm/mach-s5pv210/clock.c 的init_clock_off 的数组里面添加Nand的相关选项。注意不要加.dev的相关选项,编译不能通过,只有道行高了,再去结构化他把。
注意:s3c_nand.c 里面clk_get(xxx,"nand"),要和clock.c 文件里面定义的 name 一致,也就是nand
这样,Nand 就能正常启动了,但是yaffs2 解压完成之后。又有了新的BUG
BUG: sleeping function called from invalid context at include/linux/freezer.h
不清楚什么原因,睡觉了






和上次相比,没有太大的进展,只是把 Nand 的驱动,移植到了 3.0.8 上面,能够正常启动,也能运行系统,但是 系统一启动就要输入密码,不清楚什么情况。
明天移植LCD 的驱动,不能启动Android ,也可以启动个别的系统玩




LCD 驱动没有移植成功,主要原因是一开是没有弄明白 framebuffer 和LCD 驱动之间的关系,framebuffer 是一个中间层,介于软件和硬件之间。
LCD 的驱动就是GPU 的驱动,它在 drivers/gpu/pvr 目录下,这个是qt210 所用的GPU 驱动,直接复制了过来,没有太大的移植难度。主要是参数配置有问题,导致了fb_size 太小,系统就不能启动了,中断了,估计把这个移植完成,就可以正常启动系统了。



参数调整之后,缓存分配不了,系统不能启动,DMA 的大小为14M ,但是framebuffer 就用掉了10M 左右,而且系统启动不起来,移植的内存分配错误




LCD 驱动移植,无限吐血中。。。。。。强烈怀疑Linux 这帮人怎么整的架构。

猜你喜欢

转载自machenhui880501-gmail-com.iteye.com/blog/1716378