CubieBoard install Ubuntu on NAND+SATA
从头制作硬盘上的ubuntu,引导在nand,rootfs在硬盘
转自http://hi.baidu.com/tangjunquan
兼解决Onefish 最小系统篇内pty error问题。所须资源:
1,一块cubieboard 板子(A10+NAND+SATA);一张TF卡1G以上。
2,一台装有ubuntu 系统,4G以上的硬盘剩余空间, root用户权限的宿主机。
制作步骤:
一,纯TF卡制作启动ubuntu
1,配置编译环境
在ubuntu 下安装如下软件,主要用于编译源码及基础系统安装
# apt-get install build-essential u-boot-tools qemu-user-static debootstrap emdebian-archive-keyring git libusb-1.0-0-dev pkg-config
# apt-get install gcc-arm-linux-gnueabihf ; pc 交差编译 arm 系统。
参考:http://blog.chinaunix.net/uid-25120309-id-3501821.html
2,制做TF卡
插上TF卡后用#fdisk -l可以看到卡在系统中的名字,名字不一定一样,一般为:/dev/mmcblk0(我机上显示以这个为例) 或者 /dev/sda ,视自己环境而定。
注意,ubuntu系统默认有TF插入后会自动mount,请弹出不要挂载目录,以免无法进行以下操作。
# dd if=/dev/zero of=/dev/mmcblk0 bs=1M count=1
TF卡分区
#fdisk /dev/mmcblk0
fdisk 用法参见:http://wenku.baidu.com/view/074760c60c22590102029d48.html
注意:分每一个分区须从2048开始,用a命令改为引导分区,用t命令改变分区类型为c
# fdisk -l /dev/mmcblk0
Device Boot Start End Blocks Id System
/dev/mmcblk0p1 *2048 34815 16384 c W95 FAT32 (LBA)
/dev/mmcblk0p2 34816 31116287 15540736 83 Linux
将第一分区格式化成vfat格式
# mkfs.vfat /dev/mmcblk0p1
将第二分区格式化成ext4格式,看你的卡的容量,可能要稍等一会儿。
# mkfs.ext4 /dev/mmcblk0p2
3,建立引导
# git clone https://github.com/linux-sunxi/u-boot-sunxi.git
# cd u-boot-sunxi/
# make distclean CROSS_COMPILE=arm-linux-gnueabihf-
# make cubieboard CROSS_COMPILE=arm-linux-gnueabihf-
结束后写入
# dd if=spl/sunxi-spl.bin of=/dev/mmcblk0 bs=1024 seek=8
# dd if=u-boot.bin of=/dev/mmcblk0 bs=1024 seek=32
# cd ..
4,编译内核
下载内核源码,如果通过git下载可能时间较长。
# git clone git://github.com/linux-sunxi/linux-sunxi.git
# cd linux-sunxi/
注:这里可以用git选择内核版本如(git checkout -b oringe\sunxin-3.4)
检查内核源码树,是否纯净。不纯净,则会CLEAN。
# make ARCH=arm mrproper
使用sun4i的默认配置(第一次编译时使用)
# make ARCH=arm sun4i_defconfig
选择内核编译配置(根据个自的情况而定,选择完成后保存)
# make ARCH=arm menuconfig
这里最主要是要选择加载SATA驱动【Device Drivers ----->Serial ATA and Parallel ATA drivers ---> 把这 <M> SoftWinner Platform AHCI SATA support 按'y'改成 <*> SoftWinner Platform AHCI SATA support】
编译内核,时间较长,请耐心等待
# make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- uImage
注:请确认编译无误。正确应该看到Image arch/arm/boot/uImage is ready。否则请根据提示再执行# make ARCH=arm menuconfig ; # make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- uImage
直至正确。一些选项可能造成编译无法编译通过,可以如果不是重要功能可以取消或与维护者联系。
# make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- modules
请确保编译无误,正确应该看到类似LD [M] XXXX/XXXX/XXX.ko。否则请根据提示再执行# make ARCH=arm menuconfig ; # make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- uImage ; # make
ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- modules直至正确。一些选项可能造成编译无法编译通过,可以如果不是重要功能可以取消或与维护者联系。
# cd ..
5,制做script.bin
# git clone https://github.com/linux-sunxi/sunxi-tools.git
# cd sunxi-tools
# make
得到 fex2bin 文件,这个是能把 *.fex 文件生成 *.bin文件。
# cd ..
# git clone https://github.com/linux-sunxi/sunxi-boards.git
# cd sunxi-boards/sys_config/a10/
在 sys_config/a10 目录下,我们能找到 cubieboard.fex 文件,这就是我们需要的
编译,得到 script.bin
# ../../../sunxi-tools/fex2bin cubieboard.fex script.bin
6,建立引导
建立引导区挂载点(注,此时应在a10#目录下,主要为了拷贝方便)
# mkdir -p /mnt/1
# mkdir -p /mnt/2
# mount /dev/mmcblk0p1 /mnt/1
# mount /dev/mmcblk0p2 /mnt/2
# cp script.bin /mnt/1/
进入内核目录
# cd ../../../linux-sunxi/
# cp arch/arm/boot/uImage /mnt/1/
7,建立rootfs
注意:ubuntu与debain在配置方面略有差别,主要就是tty1.conf与inittab。ubuntu的rootfs,引导时inittab已经不默认引导,安装时默认也无此文件,两者安装是有区别的。如果在ubuntu下直接使用
inittab会循环出现如下信息:
<3>init: Failed to create pty - disabling logging for job
[ 5.140000] init: Failed to create pty - disabling logging for job
<4>init: Temporary process spawn error: No such file or directory
[ 5.150000] init: Temporary process spawn error: No such file or directory
本文主要是以ubuntu raring为例,所以执行以下命令
## debootstrap --arch=armhf --variant=buildd --foreign raring /mnt/ (如果要安装debain请执行这个命令 # debootstrap --arch=armhf --variant=buildd --foreign wheezy /mnt/2/ http://ftp.cn.debian.org/debian )
以上是你rootfs中的基本文件。如果还觉得大,请自行处理。
拷贝arm的仿真环境
# cp /usr/bin/qemu-arm-static /mnt/2/usr/bin/
# chroot /mnt/2/ (执行这句后你输入的命令就相当于是在你要安装的系统上运行命令了)
此时你将看到,你的提示符,前面已经加上I have no name!。
安装核心包
# /debootstrap/debootstrap --second-stage
………………
I: Base system installed successfully.
这是成功安装了最简系统。
接下来,可能是你容易忽略的一件事。更改你超级用户(root)的密码。
# chroot . passwd
配置armhf apt-get 源
#vi /etc/apt/sources.list (如果没有vi命令,可以在宿主机上编辑好了然后cp到rootfs内)
加入下面两句并保存
deb http://ports.ubuntu.com/ raring main restricted universe multiverse
deb-src http://ports.ubuntu.com/ raring main restricted universe multiverse
然后就可以更新并安装程序
#apt-get update
#apt-get install XXXX
配置网络
#vi /etc/network/interfaces
添加
# The primary network interface
auto eth0
#iface eth0 inet dhcp
iface eth0 inet static
address 192.168.1.203
netmask 255.255.255.0
gateway 192.168.1.1
#vi /etc/resolv.conf (dns)
nameserver 192.168.1.1
# exit
执行上面命令回到我们宿主中。为什么呢。最小系统里工具比较少,折腾麻烦。而且我们还有工作没有做完。接着来。
现在我们将安装系统的模块。在此之前,请确认你的目录。
# pwd
/root/linux-sunxi
8,系统模块的安装
# make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- INSTALL_MOD_PATH=/mnt/2/ modules_install
到此为止,你的系统,基本是安装完了。还需要最后一步。告诉系统,你的rootfs的位置。
# cd /mnt/1
# cat <<EOT > boot.cmd
> setenv bootargs console=ttyS0,115200 root=/dev/mmcblk0p2 rootwait panic=10 ${extra}
> fatload mmc 0 0x43000000 script.bin
> fatload mmc 0 0x48000000 uImage
> bootm 0x48000000
> EOT
转换成.scr
# mkimage -C none -A arm -T script -d boot.cmd boot.scr
9,更改配置文件
ubuntu系统须更改tty1.conf
# vi /etc/init/tty1.conf
exec /sbin/getty -8 38400 tty1 修改为: exec /sbin/getty -8 115200 ttyS0
debain系统须更改这两个文件编辑inittab及fstab 文件
# cd /mnt/2/etc/
# cat <<EOT >> inittab
> T0:2345:respawn:/sbin/getty -L ttyS0 115200 linux
> EOT
# cat <<EOT >> fstab
> proc /proc proc defaults 0 0
> /dev/mmcblk0p1 /boot vfat defaults 0 2
> /dev/mmcblk0p2 / ext4 defaults,noatime 0 1
> EOT
10,系统制做完毕。取卡
再取卡前,请一定注意先执行以下umount命令。否则数据不会写到tf卡里!
# cd
# umount /mnt/1
# umount /mnt/2
二,制作Nand+SATA启动系统
把tf卡插到cubieboard上,通电启动,第一次启动是用是TF卡启动。用ssh连接上。
1,下载NAND boot partition and MBR image
# wget http://dl.cubieforums.com/loz/bo ... partition_image.bin
# dd if=./cubie_nand_uboot_partition_image.bin of=/dev/nand
# reboot (必须重启,然后看到nand已重新分区并默认生成了引导所须文件)
详细参加:http://linux-sunxi.org/Cubieboard/Installing_on_NAND
2,SATA用fdisk分区分格式化成ext4.建立rootfs
# fdisk /dev/sda
....
# mkfs.ext4 /dev/sda1
# mount /dev/sda1 /mnt/sda1
# mount /dev/mmcblk0p2 /dev/mmc2
# cp -r -P /dev/mmc2/* /mnt/sda1/ (一定要用参数 -P 加属性)
# mount /dev/mmcblk0p1 /mnt/mmc1
# cp -P /mnt/mmc1/uImage /mnt/sda1/boot/uImage (cp uImage to rootfs)
#mount /dev/nanda /mnt/nanda
3,修改配置引导到SATA启动
这项工作须在宿主机上做。
# cat <<EOT > boot.cmd
> setenv bootargs console=ttyS0,115200 root=/dev/sda1 rootwait panic=10 ${extra}
> fatload mmc 0 0x43000000 script.bin
> fatload mmc 0 0x48000000 uImage
> bootm 0x48000000
> EOT
其中"root=/dev/mmcblk0p2"指定启动位置,这里指的是从tf卡启动。如果要从SATA启动,设置成SATA在系统中的名字。如"root=/dev/sda1"
转换成.scr
# mkimage -C none -A arm -T script -d boot.cmd boot.scr
然后把boot.scr 远程拷贝到目标机上
# scp boot.scr root@192.168.1.203/mnt/nanda/
然后输入密码,确定cp成功
4,关机取出TF卡后重启,验证系统是否启动在SATA上。
在目标机上去掉所有mount
#umount -a
#shutdown -h now
取出tf卡,重启查看
# df -l
5,如果正确启动,可以添加swap.
参见:http://lanlfeng.blog.51cto.com/337014/123130/
# dd if=/dev/zero of=/mnt/swap bs=1M count=1024
# mkswap /mnt/swap
# vi /etc/fstab
添加到文件最后
/mnt/swap swap swap defaults 0 0
至此,基本完毕。欢迎指正错误或增加新内容一起探讨。
此文最主要参考来源为:http://blog.chinaunix.net/uid-25120309-id-3501821.html
|