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-1.22.0目录,打开makefile修改CROSS_COMPILE和ARCH,如下:
CROSS_COMPILE ?= arm-linux-
ARCH ?= arm
使用make xconfig或者make menuconfig进行配置
红圈部分可选可不选。
红圈部分还是选上吧,防止覆盖宿主机的这个目录。
下图中的红色部分修改成前面使用脚本生成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目录下的库文件。
到这里就完成了,启动系统看看运行界面吧:
网上有人把linux内核也安装了,我这里没有安装,也是可以运行的,安装linux后打包的话会非常大,所以我没有安装linux内核,以后需要再说吧。
如果大神了解这个情况的留下言哈,再次谢过了。