基于友善的superboot 移植linux内核到tiny210(s5pv210)上

来源:互联网 发布:epson照片打印软件 编辑:程序博客网 时间:2024/06/07 13:56

 友善提供的开发板光盘里已经提供了友善官方移植的内核,但是为了自己的开发方便,并且防止受到友善的干扰,移植一个基于友善的super boot的内核。

   super-boot(友善官方提供)

   内核(3.4.2)

   根文件系统nfs(韦老师提供,网上很多)

 

1. super-boot 参数配置

友善的super-boot是不开源的,但是我们可以修改其提供的参数bootargs来修改启动命令:

修改命令如下:

################### Linux ####################Linux-BootLoader = Superboot210.binLinux-Kernel = Linux/zImage#Linux-CommandLine = root=/dev/mtdblock4   rootfstype=yaffs2 console=ttySAC0,115200 init=/linuxrc skipcali=yes ctp=3Linux-CommandLine = console=ttySAC0,115200   root=/dev/nfs nfsroot=192.168.1.5:/home/book/Codes/fs_mini_mdev_new ip=192.168.1.230:192.168.1.5:192.168.1.5:255.255.255.0:linux.arm9.net:eth0:off  skipcali=yes ctp=3#Linux-RootFs-InstallImage = Linux/rootfs_qtopia_qt4-mlc2.img


其中# 是注释符号 ,这里的参数配置时一定要细心。

 

2.  移植新版本的内核。

从kernel org 中下载下来最新的内核:

2.1. 解压下来后修改根目录下的Makefile :

ARCH            ?= armCROSS_COMPILE   ?= arm-linux-


2.2.修改配置,使用和tiny210最相似的开发板配置.执行如下命令:

make    s5pv210_defconfig


2.3. 执行make 命令生成zImage

make

这里用于生成对应superboot的镜像,因此必须生成zImage

 

2.4. 修改内核串口配置

经过上面三步的命令后,就可以烧写和启动kernel了,但是此时终端上除了打印loading kernel之外就再无打印信息了,原因是kernel默认的串口是串口1,需要将

其改为串口0,执行make menuconfig,修改串口配置:

system type  (0) S3C UART to use for low-level messages 

编辑此项为0 ,此时重新烧写zImage ,就能看到终端输出了。

 

2.5. 修改机器码

经过上面的步骤之后,终端会有输出,但是输出的信息会提示你机器码不正确。

superboot在启动内核时一开始会比较superboot中的机器码和内核提供的机器码是否匹配。显然这里内核的机器码和superboot中并不匹配

修改:内核支持的机器码:

由于superboot不开源,所以只能修改内核中的机器码:

打开include/generated/mach-types.h文件: 修改:

//#define MACH_TYPE_SMDKV210             2456#define MACH_TYPE_SMDKV210             3466

重新编译烧写,此时就能kernel就能正常跑下去了。

 

2.6 移植dm9000网卡驱动程序。

网卡驱动程序的移植其实很简单,由于其接口是内存型接口,一般只要修改其中断引脚号和内存片地址就行。

参考友善提供的mach-mini210.c修改:

arch\arm\mach-s5pv210\Mach-smdkv210.c

#define S5PV210_PA_DM9000_A(0x88001000)#define S5PV210_PA_DM9000_F(S5PV210_PA_DM9000_A + 0x300C)static struct resource smdkv210_dm9000_resources[] = {[0] = {.start= S5PV210_PA_DM9000_A,// 片选地址.end= S5PV210_PA_DM9000_A + SZ_1K*4 - 1,.flags= IORESOURCE_MEM,},[1] = {.start= S5PV210_PA_DM9000_F,.end= S5PV210_PA_DM9000_F + SZ_1K*4 - 1,.flags= IORESOURCE_MEM,},[2] = {.start= IRQ_EINT(7),  // 中断号.end= IRQ_EINT(7),.flags= IORESOURCE_IRQ | IORESOURCE_IRQ_HIGHLEVEL,},};static struct dm9000_plat_data smdkv210_dm9000_platdata = {.flags= DM9000_PLATF_16BITONLY | DM9000_PLATF_NO_EEPROM,.dev_addr= { 0x08, 0x90, 0x00, 0xa0, 0x02, 0x10 },};static struct platform_device smdkv210_dm9000 = {.name= "dm9000",.id= -1,.num_resources= ARRAY_SIZE(smdkv210_dm9000_resources),.resource= smdkv210_dm9000_resources,.dev= {.platform_data= &smdkv210_dm9000_platdata,},};
static void __init smdkv210_dm9000_init(void){unsigned int tmp;gpio_request(S5PV210_MP01(1), "nCS1"); // 这里需要修改s3c_gpio_cfgpin(S5PV210_MP01(1), S3C_GPIO_SFN(2)); gpio_free(S5PV210_MP01(1));tmp = (5 << S5P_SROM_BCX__TACC__SHIFT);__raw_writel(tmp, S5P_SROM_BC1);tmp = __raw_readl(S5P_SROM_BW);tmp &= (S5P_SROM_BW__CS_MASK << S5P_SROM_BW__NCS5__SHIFT);tmp |= (1 << S5P_SROM_BW__NCS1__SHIFT);__raw_writel(tmp, S5P_SROM_BW);}

这里附上原理图: 作为参照:

移植好网卡驱动程序,并且创建好你的根文件系统就能正常启动了。

 

 

3 移植网络文件系统

这部分网上资料很多,我直接拿的韦东山老师移植好的文件系统或者您也可以使用友善提供的qt的文件系统都是可以的。

 

 


 

 

 


 

 


 

 

 

 

     

 
0 0