基于友善的superboot 移植linux内核到tiny210(s5pv210)上
2014-05-29 14:47
387 查看
友善提供的开发板光盘里已经提供了友善官方移植的内核,但是为了自己的开发方便,并且防止受到友善的干扰,移植一个基于友善的super boot的内核。
super-boot(友善官方提供)
内核(3.4.2)
根文件系统nfs(韦老师提供,网上很多)
1. super-boot 参数配置
友善的super-boot是不开源的,但是我们可以修改其提供的参数bootargs来修改启动命令:
修改命令如下:
其中# 是注释符号 ,这里的参数配置时一定要细心。
2. 移植新版本的内核。
从kernel org 中下载下来最新的内核:
2.1. 解压下来后修改根目录下的Makefile :
2.2.修改配置,使用和tiny210最相似的开发板配置.执行如下命令:
2.3. 执行make 命令生成zImage
这里用于生成对应superboot的镜像,因此必须生成zImage
2.4. 修改内核串口配置
经过上面三步的命令后,就可以烧写和启动kernel了,但是此时终端上除了打印loading kernel之外就再无打印信息了,原因是kernel默认的串口是串口1,需要将
其改为串口0,执行make menuconfig,修改串口配置:
编辑此项为0 ,此时重新烧写zImage ,就能看到终端输出了。
2.5. 修改机器码
经过上面的步骤之后,终端会有输出,但是输出的信息会提示你机器码不正确。
superboot在启动内核时一开始会比较superboot中的机器码和内核提供的机器码是否匹配。显然这里内核的机器码和superboot中并不匹配
修改:内核支持的机器码:
由于superboot不开源,所以只能修改内核中的机器码:
打开include/generated/mach-types.h文件: 修改:
重新编译烧写,此时就能kernel就能正常跑下去了。
2.6 移植dm9000网卡驱动程序。
网卡驱动程序的移植其实很简单,由于其接口是内存型接口,一般只要修改其中断引脚号和内存片地址就行。
参考友善提供的mach-mini210.c修改:
arch\arm\mach-s5pv210\Mach-smdkv210.c
这里附上原理图: 作为参照:
![](https://oscdn.geek-share.com/Uploads/Images/Content/201405/519acfa3f92e986002095f1184e7a028)
移植好网卡驱动程序,并且创建好你的根文件系统就能正常启动了。
3 移植网络文件系统
这部分网上资料很多,我直接拿的韦东山老师移植好的文件系统或者您也可以使用友善提供的qt的文件系统都是可以的。
super-boot(友善官方提供)
内核(3.4.2)
根文件系统nfs(韦老师提供,网上很多)
1. super-boot 参数配置
友善的super-boot是不开源的,但是我们可以修改其提供的参数bootargs来修改启动命令:
修改命令如下:
################### Linux #################### Linux-BootLoader = Superboot210.bin Linux-Kernel = Linux/zImage #Linux-CommandLine = root=/dev/mtdblock4 rootfstype=yaffs2 console=ttySAC0,115200 init=/linuxrc skipcali=yes ctp=3 Linux-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 ?= arm CROSS_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的文件系统都是可以的。
相关文章推荐
- tiny210(s5pv210)移植u-boot(基于 2014.4 版本)——移植u-boot-spl.bin(内存初始化)
- tiny210(s5pv210)移植u-boot(基于 2014.4 版本)——移植网卡
- tiny210(s5pv210)移植u-boot(基于 2014.4 版本)——编译过程
- tiny210(s5pv210)移植u-boot(基于 2014.4 版本)——前言
- tiny210(s5pv210)移植u-boot(基于 2014.4 版本)——移植u-boot-spl.bin(点亮led灯)
- tiny210(s5pv210)移植u-boot(基于 2014.4 版本)——配置过程(一)
- tiny210(s5pv210)移植u-boot(基于 2014.4 版本)——移植u-boot-spl.bin(内存初始化)
- 基于ZLG/BOOT的linux2.6内核移植(s3c2410)
- tiny210(s5pv210)移植u-boot(基于 2014.4 版本)——NAND添加分区
- tiny210(s5pv210)移植u-boot(基于 2014.4 版本)——配置过程(三)
- tiny210(s5pv210)移植u-boot(基于 2014.4 版本)——配置过程(一)
- tiny210(s5pv210)移植u-boot(基于 2014.4 版本)——移植u-boot-spl.bin(时钟初始化)
- tiny210(s5pv210)移植u-boot(基于 2014.4 版本)——移植u-boot-spl.bin(时钟初始化)
- tiny210(s5pv210)移植u-boot(基于 2014.4 版本)——移植开始
- tiny210(s5pv210)移植u-boot(基于 2014.4 版本)——移植u-boot.bin(打印串口控制台)
- tiny210(s5pv210)移植u-boot(基于 2014.4 版本)——NAND添加分区
- tiny210(s5pv210)移植u-boot(基于 2014.4 版本)——移植u-boot.bin(内存布局)
- tiny210(s5pv210)移植u-boot(基于 2014.4 版本)——移植u-boot.bin(修改显示信息)
- tiny210(s5pv210)移植u-boot(基于 2014.4 版本)——移植u-boot.bin(内存布局)
- tiny210(s5pv210)移植u-boot(基于 2014.4 版本)——移植u-boot.bin(打印串口控制台)