kernel 2.6.35.7向S5PV210移植
kernel 2.6.35.7向S5PV210移植
ARCH和CROSS_COMPILE配置
不详述,改就对了。
错误1
未出现Uncompressing Linux... done, booting the kernel.
。
解压地址应当等于链接地址,否则自解压之后不可运行。
链接的物理地址可以在head.S
的开头看到。那么解压缩地址在哪呢?
// 内核运行的虚拟地址 0xC0008000
#define KERNEL_RAM_VADDR (PAGE_OFFSET + TEXT_OFFSET)
// 内核运行的物理地址 0x30008000
#define KERNEL_RAM_PADDR (PHYS_OFFSET + TEXT_OFFSET)
arch/arm/mach-s5pv210/Makefile.boot
其中定义了解压缩地址。
# override for SMDKV210
zreladdr-$(CONFIG_MACH_SMDKV210) := 0x30008000
params_phys-$(CONFIG_MACH_SMDKV210) := 0x30000100
改为如上。改完之后,就可以运行解压缩了。
之后再修改内核运行的物理地址(原本PHYS_OFFEST
是0x2000_0000
)为0x3000_0000
错误2
Unable to handle kernel NULL pointer dereference at virtual address 00000060
Internal error: Oops: 5 [#1] PREEMPT
PC is at dev_driver_string+0xc/0x44
LR is at max8698_pmic_probe+0x150/0x32c
说明在这两个函数出现了问题。考虑到之前uboot移植中,smdkc110使用了电源管理模块,那么这里也可以推测是电源管理模块出现了问题。
解决办法就是在内核配置中去除该模块。直接在MENUCONFIG中搜索MAX8696,关掉就可以。
错误3
Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(0,0)
panic应该是一个比较严重的错误。说白了就是没识别块设备。这里的识别应当就是inand。这里应当是驱动的问题。
MBR往往在SD0扇区。用于描述块设备分区信息。这里不好修改。
错误4
[ 1.130308] dm9000 Ethernet Driver, V1.31
[ 1.133113] ERROR : resetting
[ 1.135700] dm9000 dm9000.0: read wrong id 0x2b2a2928
[ 1.140915] dm9000 dm9000.0: read wrong id 0x2b2a2928
[ 1.145941] dm9000 dm9000.0: read wrong id 0x2b2a2928
[ 1.150963] dm9000 dm9000.0: read wrong id 0x2b2a2928
[ 1.155992] dm9000 dm9000.0: read wrong id 0x2b2a2928
[ 1.161018] dm9000 dm9000.0: read wrong id 0x2b2a2928
[ 1.166041] dm9000 dm9000.0: read wrong id 0x2b2a2928
[ 1.171070] dm9000 dm9000.0: read wrong id 0x2b2a2928
[ 1.176092] dm9000 dm9000.0: wrong id: 0x2b2a2928
[ 1.180774] dm9000 dm9000.0: not found (-19).
mach-smdkc110.c
中smdkc110_machine_init
硬件初始化存在问题。
smdkc110_devices
和smdkc110_dm9000_set()
这两个地方是和DM9000有关的,要分别去做移植。
DM9000相关的数据配置在arch/arm/plat-s5p/devs.c中更改
在arch/arm/mach-s5pv210/include/mach/map.h中定义了DM9000的IO基地址,和DM9000接在哪个bank有关。
还有+2改成+4,IRQ_EINT9改成10即可。