注册 登录  
 加关注
查看详情
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

蒙奇D小豌豆的博客

蒙奇D小豌豆的学习记录

 
 
 

日志

 
 

华恒HHs3c610内核移植  

2010-05-04 22:48:32|  分类: others |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

 

最近拿了块华恒的HHs3c6410来移植,给出的内核是2.6.24的,想把它移植到2.6.29

1  下载内核

A  网上有种支持6410的andriod内核下载,实现了s3c6410基本功能,GIT和repo用方法,下载android-2.6.29内核。 

具体方法参见http://www.hzlitai.com.cn/article/ARM11/SYSTEM/1761.html

B  下载纯净版内核,自己重新构建内核功能。

通过http://www.kernel.org/pub/linux/kernel/v2.6/下载自己所需要内核。

2  编译内核(用的编译工具是光盘里面给的arm-unknown-linux-gnu-)

A  解压缩内核压缩文件后进入到目录中,然后修改Makefile,找到

ARCH ?=

CROSS_COMPILE ?=

这两项,不修改这两项的话将会默认使用x86的配置,这里修改为

ARCH ?= arm

CROSS_COMPILE ?= /opt/arm-2008q3/bin/arm-none-linux-gnueabi-

arm-unknown-linux-gnu- 是交叉编译器~ 这里我使用的交叉编译器为华恒给的gcc-4.0.1-glibc-2.3.5,带EABI

然后执行make menuconfig,然后进入System Type中看看是否为ARM体系~

第一行为ARM system type 说明没错~  然后在ARM system type中选中

ARM system type(Samsung S3c64xx)

-----à Samsung S3c64xx

选中下面的SMDK6410

设置boot options  为 console=ttySAC0,115200n8  init=/init

退出保存~ 执行make

出现ERROR

drivers/video/console/vgacon.c:510:error “PCIMEM_BASE undeclared”

是在vgacon_startup中,vgacon是啥?~ 不认识~ 应该是不必要的东西~ 去掉它~

vim drivers/video/console/Makefile

在里面看见了这句

obj-$(CONFIG_VGA_CONSOLE) += vgacon.o

然后执行 find ./ -name “Kconfig” | xargs grep “VGA_CONSOLE”

看见config VGA_CONSOLE 在driver/video/console/Kconfig中

也就是说在驱动->视频->终端中,执行make menuconfig

在Device Drivers->Graphics Support->Console display driver support中发现了VGA text console

去掉它,保存设置后再编译,编译完成后将在arch/arm/boot中得到zImage文件

通过tftp这个内核文件到ram里面 得到下列输出

Starting_kernel.....

.

Uncompressing Linux........................................................................................................ done, booting the kernel.

失败

信息不够丰富,在配置中进入Kernel hacking

打开Kernel debugging和Kernel low-level debugging functions 还有 Kernel low-level debugging messages via S3C UART

保存后再编译

Starting_kernel......

Uncompressing Linux........................................................................................................ done, booting the kernel.

失败

咦?~ 啥都没有?~ 最起码也应该有个乱码吧  这时候我的第一反应是会不会没有跳入到start_kernel中

所以马上编辑init/main.c,在start_kernel的前部加上printk(KERN_INFO “in start_kernel \n”);

编译后执行zImage,得下列输出

Starting_kernel......

Uncompressing Linux......................................................................................................... done, booting the kernel.

 in  start_kerne.......................

失败

还是这样,虽然正常输出了~ 有进入start_kernel~ 但是为什么之前每输出呢?~ 会不会是没有找到输出设备

会不会是没有ttySAC0这个设备呢~ 在内核中搜索ttySAC 在driver/serial/samsung.c中得到对应项目这时候我猜想会不会没有加载samsung.c , 经过一轮Makefile和Kconfig的查询 , 发现对应选项在Device Drivers->Character devices->Serial drivers中

一看,原来根本就没有加载Samsung SoC serial support , 选成静态编译([*])之后又出现了Support for console on Samsung SoC serial port ,就是它了,选上.

Uncompressing Linux......................................................................................................... done, booting the kernel.

 in start_kerne.......................

………………………………….

………………………………….

最后为

VFS: Cannot open root device "<NULL>" or unknown-block(0,0)

Please append a correct "root=" boot option; here are the available partitions:

1f00             256 mtdblock0 (driver?)

1f01           15104 mtdblock1 (driver?)

1f02         1033216 mtdblock2 (driver?)

Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(0,0)

失败

找不到根文件系统,因为内核镜像文件和文件系统镜像文件压缩在一起(zImage),华恒给了一个busybox做的文件系统在文件夹romfs中.跟华恒给的24内核做对比发现在内核配置选项中:

General setup--à Initial RAM filesystem and RAM disk (initramfs/initrd) suppor               

 initramfs  source file(s) 中填上 ../romfs

这种方法很和网上的很不一样网上很多都是用yaffs文件系统做为rootfs。

保存配置后编译,输出为 

VFP support v0.3: implementor 41 architecture 1 part 20 variant b rev 5

Freeing init memory: 128K

Kernel panic - not syncing: Attempted to kill init!

失败

依然错误,这个时候懵了,哪里错呢~ 没办法,只能对照着友善的配置一个个大模块对着来改

当改到Kernel Features的时候错误消失了,原来需要选上

Use the ARM EABI to compile the kernel

Allow old ABI binaries to run with thie Kernel

为什么呢?~ Google了一下,原来友善的根文件系统在编译的时候也启用了EABI特性,内核和文件系统需要对上

文件系统用了EABI 内核也要用EABI 内核不用EABI 也只能读取不用EABI的文件系统

选上这两项之后再编译,运行,输出如下

VFP support v0.3: implementor 41 architecture 1 part 20 variant b rev 5     

Freeing init memory: 7184K

init started: BusyBox v1.12.0-he5e4f9f4909c (2009-04-02 10:42:05 CST)

starting pid 355, tty '': '/etc/init.d/rcS'

Cannot run '/etc/init.d/rcS': No such file or directory、

Please press Enter to activate this console.

starting pid 356, tty '': '-/bin/sh'

#

# ls

sys      sbin     proc     mnt      home     etc      linuxrc  tmp

usr      dev      hhtech   lib      init     bin      var

哈哈  第一步完工 接下来就是移植驱动,一步步来~ 先做好终端输出 再挂载好根文件系统 最后才考虑其它驱动的配置。

  评论这张
 
阅读(677)| 评论(0)

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018