real210移植记录-u-boot2013.10引导linux3.10.30进入控制台

http://blog.csdn.net/wang_shuai_ww/article/details/19678989这篇文章已经介绍了正常引导linux的方法,但只是能够引导,并不能进入控制台,本篇将会介绍怎么进入控制台。


首先要明确要进入控制台要做什么事。在上篇基础上,再增加DM9000的支持和NFS的支持即可进入梦寐以求的控制台了。


下面先从增加DM9000的支持介绍。

由于3.10.30版本内核已经有对DM9000支持,所以稍作修改即可完成移植。

修改结构体smdkv210_dm9000_resources 和函数 smdkv210_dm9000_init(),修改成如下所示即可。

static struct resource smdkv210_dm9000_resources[] = { 
    [0] = { 
        .start = 0x88000000,
        .end = 0x88000000 + 3,
        .flags = IORESOURCE_MEM,
    },  
    [1] = { 
        .start = 0x88000000 + 4,
        .end = 0x88000000 + 4 + 3,
        .flags = IORESOURCE_MEM,
    },  
    [2] = { 
        .start = IRQ_EINT(9),
        .end = IRQ_EINT(9),
        .flags = IORESOURCE_IRQ|IORESOURCE_IRQ_HIGHLEVEL,
    }   
};
这里使用中断线9,可在原理图查得。

static void __init smdkv210_dm9000_init(void)
{
    unsigned long* srom_bw = ioremap(0xE8000000, 4); 
    unsigned long* srom_bc1 = ioremap(0xE8000004, 4); 

    *srom_bc1 = ((0<<28)|(0<<24)|(5<<16)|(0<<12)|(0<<8)|(0<<4)|(0<<0));
    *srom_bw &= ~(0xf << 4); 
    *srom_bw |= (1<<4)|(1<<5);

    gpio_request(S5PV210_MP01(1), "nCS1");
    s3c_gpio_cfgpin(S5PV210_MP01(1), S3C_GPIO_SFN(2));
    gpio_free(S5PV210_MP01(1));

    iounmap(srom_bw);
    iounmap(srom_bc1);
}

然后编译内核即可。

内核完成后还需要对u-boot进行设置才行,也就是对linux内核传递参数的设置。

setenv bootargs noinitrd root=/dev/nfs console=ttySAC2,115200 init=/linuxrc nfsroot=192.168.1.22:/nfsboot/my_system/rootfs/ rw ip=192.168.1.21:192.168.1.22:192.168.1.1:255.255.255.0::eth0:on

如果内核也使用挂载方式,那么还可以设置内核以tftp方式加载到内存。

setenv bootcmd "tftp 30008000 /210_old/uImage;bootm 30008000"

设置完上面的环境变量后saveenv保存环境变量即可。


内核和u-boot都完成后下面就是制作根文件系统了。这个网上有很多,这里我再在后面说说自己的一些见解。

首先要创建目录,使用下面的脚本即可:

#!/bin/sh
echo "------Create rootfs directons start...--------"
mkdir rootfs
cd rootfs
echo "--------Create root,dev....----------"
mkdir root dev etc boot tmp var sys proc lib mnt home usr 
mkdir etc/init.d etc/rc.d etc/sysconfig
mkdir usr/sbin usr/bin usr/lib usr/modules
echo "make node in dev/console dev/null"
sudo mknod -m 600 dev/console c 5 1
sudo mknod -m 600 dev/null  c 1 3
mkdir mnt/etc mnt/jffs2 mnt/yaffs mnt/data mnt/temp
mkdir var/lib var/lock var/run var/tmp
chmod 1777 tmp
chmod 1777 var/tmp
echo "-------make direction done---------"

目录建立完后可以编译busybox了,我使用的版本是busybox-1.22.0,可以去官网下载。

然后解压,进入busybox-1.22.0目录,打开makefile修改CROSS_COMPILE和ARCH,如下:

CROSS_COMPILE ?= arm-linux-

ARCH ?= arm

使用make xconfig或者make menuconfig进行配置

real210移植记录-u-boot2013.10引导linux3.10.30进入控制台_第1张图片

红圈部分可选可不选。

real210移植记录-u-boot2013.10引导linux3.10.30进入控制台_第2张图片

红圈部分还是选上吧,防止覆盖宿主机的这个目录。

下图中的红色部分修改成前面使用脚本生成rootfs的绝对路径即可。


其他默认,编译即可。

使用的编译命令为make install,执行完成后会在rootfs目下有个linuxrc文件。


这时文件系统还是不可用的,还需要添加一些文件。

在etc目录下创建Inittab文件,内容如下

::sysinit:/etc/init.d/rcS
console::askfirst:-/bin/sh
::restart:/sbin/init
::ctrlaltdel:/sbin/reboot
::shutdown:/bin/umount -a -r
::shutdown:/sbin/swapoff -a
在etc/init.d/目录下创建rcS文件,内容如下

echo "----------mount all.........."
mount -a
echo "----------Starting mdev......"
echo /sbin/mdev > /proc/sys/kernel/hotplug
mdev -s
/bin/hostname -F /etc/sysconfig/HOSTNAME
为inittab和rcS文件添加可执行权限

chmod a+x inittab
chmod a+x rcS
在etc目录下创建fstab文件,内容如下
#evice mount-point type       option       dump   fsck   order
proc /proc proc defaults 0 0
none /tmp ramfs defaults 0 0
mdev /dev ramfs defaults 0 0
sysfs /sys sysfs defaults 0 0
在etc目录下创建profile文件,内容如下
PATH=/bin:/sbin:/usr/bin:/usr/sbin  
export PATH  
#set hostname  
HOSTNAME='/bin/hostname'  
export HOSTNAME  
# Set PS1  
PS1='[\u@\h \W]\$'
export PS1
在etc/sysconfig目录下创建HOSTNAME文件,在文件中写入主机名,我这里写的是real210。

另外还需要一些库文件,这里可以使用arm-linux-编译器的库。为了方便,也正对我的开发板,我直接把开发板配套的库文件拷贝到了刚才建立的文件系统中,主要是lib目录和usr/lib目录下的库文件。

到这里就完成了,启动系统看看运行界面吧:

real210移植记录-u-boot2013.10引导linux3.10.30进入控制台_第3张图片

网上有人把linux内核也安装了,我这里没有安装,也是可以运行的,安装linux后打包的话会非常大,所以我没有安装linux内核,以后需要再说吧。

如果大神了解这个情况的留下言哈,再次谢过了。

















你可能感兴趣的:(linux,控制台,移植,u-boot)