第二阶段部署UBOOT,uImage,rootfs到TF卡中
准备一张TF卡,最好是金士顿的TF卡,我一开始用的不是金士顿的卡,总是部署失败,后来我换了一张32G的金士顿TF卡,成功部署!像一般的金士顿1G,2G卡也没应该有问题。
1.2.1烧写UBOOT到TF卡
插入TF卡,ubuntu12.04会识别。在驱动文件下可以看到/dev/sdc,文件。有些会识别成/dev/sdb,根据自己的系统把TF卡识别成说明文件名而定。我的是识别成/dev/sdc文件。在部署之前最好把TF卡格式化了,确保里面没有其他数据。
清空TF卡,包括分区表
Sudo dd if=/dev/zero of=/dev/sdc bs=1M count=1 //意思是用0填充sdc的前1M的空间,注意这个命令也可以用来测试磁盘的读写速度。
查看TF卡是否忙碌sudo sfdisk -R /dev/sdc
BLKRRPART: Device or resource busy
This disk is currently in use.
如果出现这个打印语句说明TF已经被挂载,重新插拔一次即可。
磁盘分区:
sudo cat <<EOT | sudo sfdisk --in-order -uM /dev/sdc
回车输入
> 1,16,c
> ,,L
> EOT
这里的1,16,c表示的是从这第一个主分区(sdc)的第1-16M之间的文件系统类型为FAT32,这个c是FAT32的类型代码。而下面一行的就表示默认了两个值的大小和这么大(这个主分区1-16M后面的空间)的剩余空间的文件系统类型为LINUX.
root@ubuntu:/# sfdisk -l /dev/sdc //查看一下分区是否成功
Disk /dev/sdc: 30436 cylinders, 64 heads, 32 sectors/track
Units = cylinders of 1048576 bytes, blocks of 1024 bytes, counting from 0
Device Boot Start End #cyls #blocks Id System
/dev/sdc1 1 16 16 16384 c W95 FAT32 (LBA)
/dev/sdc2 17 30435 30419 31149056 83 Linux
/dev/sdc3 0 - 0 0 0 Empty
/dev/sdc4 0 - 0 0 0 Empty
这是我为TF卡分好的区可以清楚的看到1-16M的空间文件系统类型为FAT32,其余的空间文件系统类型为linux
磁盘格式化:
sudo sfdisk -l /dev/sdc //先看看分好不同区磁盘的名字,我的分别是sdc1,sdc2
重新分好区之后为了使dev设备文件可以识别,最好重新插拔TF卡,在dev下可以看到sdc1,sdc2这两个问件,否则在磁盘格式化的时候会提示找不到磁盘。
sudo mkfs.vfat /dev/sdc1 //把16M的sdc1磁盘格式化为vfat格式,也就是我们经常看见的FAT32格式。
sudo mkfs.ext4 /dev/sdc2 //16M以后的空间格式化为ext4格式
向TF卡烧写UBOOT.bin文件
先打开uboot文件夹
sudo dd if=spl/sunxi-spl.bin of=/dev/sdc bs=1024 seek=8
sudo dd if=u-boot.bin of=/dev/sdc bs=1024 seek=32
通过A10相关资料,通过以上2条命令烧写spl和uboot到指定位置,暂时不清楚如何确定这2个读取位置.
1.2.2烧写linux内核
制作对对A10芯片进行配置的二进制文件script.bin
打开内核源码的文件夹,然后打开源码够工具文件夹
Sudo cd ../linux-sunxi-sunxi-3.0
Sudo cd ../sunxi-tools-master/ //这个文件夹就在内核源码里面单词里面有tools
Sudo make
make出现如下错误:
Package libusb-1.0 was not found in the pkg-config search path.
Perhaps you should add the directory containing `libusb-1.0.pc'
to the PKG_CONFIG_PATH environment variable
No package 'libusb-1.0' found
Package libusb-1.0 was not found in the pkg-config search path.
Perhaps you should add the directory containing `libusb-1.0.pc'
to the PKG_CONFIG_PATH environment variable
No package 'libusb-1.0' found
但还是在sunxi-tools-master目录下生成了fex2bin。这个错误还没解决,打算先用生成的fex2bin试试(fex2bin文件,能把 *.fex文件生成 *.bin文件
解决方法:
pkg-config 是一个提供从源代码中编译软件时查询已安装的库时使用的统一接口的计算机软件。可以解决明明在自己机器上编译好好的,在别人电脑上编译就不行问题。当安装一个库时(从RPM,deb或其他二进制包管理系统),会包括一个后缀名为pc的文件,它会同其他.pc文件一起放入一个文件夹(依赖与你的系统设置)。在这个文件里包含有数个条目。这些条目通常包含用于其他使用这个库的程序编译时需要的库设置,以及头文件的位置,版本信息和一个简介。
sudo apt-get install libusb-1.0-0-dev //安装这个软件
sudo find -name "libusb-1.0.pc" //查找这个软件的安装位置
./usr/lib/i386-linux-gnu/pkgconfig/libusb-1.0.pc //这是我的机器的位置
Sudo export PKG_CONFIG_PATH=/usr/lib/i386-linux-gnu /pkgconfig:$PKG_CONFIG_PATH
Sudo set | grep PKG_CONFIG //显示本地的环境变量
PKG_CONFIG_PATH=/usr/lib/i386-linux-gnu/pkgconfig //环境变量设置成功
Sudo pkg-config libusb-1.0 --cflags –libs
Sudo make
利用上面生成的工具fex2bin,将sunxi-boards/sys_config/a10/pcduino.fex文件生成对A10芯片进行配置的二进制文件script.bin
在sunxi-tools文件夹下找到fex2bin可执行文件
Sudo ./fex2bin ../sunxi-boards/sys_config/a10/pcduino.fex script.bin //其根据自己的目录找对应的文件
sudo mount /dev/sdc1 /mnt
Sudo cd /mnt
Sudo mkdir root //在mnt目录下创建root目录
打开内核源码目录
Sudo cp arch/arm/boot/uImage /mnt/root/ //烧写内核到sdc1
打开sunxi-tools文件夹
Sudo cp script.bin /mnt/boot //找到脚本文件写入dsc1分区
配置启动参数文件
A10的UBOOT读取启动参数流程如下生成过程boot.cmd——>boot.src——>uEnv.txt
制作boot.cmd
Sudo vim boot.cmd
setenv bootargs console=ttyS0,115200 noinitrd root=/dev/mmcblk0p2 init=/sbin/init rootwait
panic=10 ${extra}
fatload mmc 0 0x43000000 boot/script.bin
fatload mmc 0 0x48000000 boot/uImage
bootm 0x48000000
制作boot.scr
Sudo mkimage -C none -A arm -T script -d boot.cmd boot.scr
制作uEnv.txt
Sudo vim uEnv.txt
bootenv=boot.scr
loaduimage=fatload mmc ${mmcdev} ${loadaddr} ${bootenv}
mmcboot=echo Running boot.scr script from mmc ...; source ${loadaddr}
配置文件写入sdc1分区
Sudo cp boot.scr /mnt/
Sudo cp uEnv.txt /mnt/
卸载sdc1分区至此uboot和uimage,启动文件烧写完毕,后面是根文件系统的烧写
Sudo umount /mnt
1.2.3向TF卡烧写根文件系统
sudo mount /dev/sdc2 /mnt/ //挂载TF卡的sdc2分区到/mnt
打开制作好的rootfs目录
sudo cp -pR rootfs/* /mnt/ //把整个目录拷贝到sdc2分区
sudo umount /dev/sdc2 //卸载分区
在全部烧写完成之后,插入TF到ubuntu12.04可以识别为两个盘,一个盘里面是有boot文件夹和boot.scr文件,uEnv.txt文件。其中boot文件夹里面装着script.bin和uImage文件。另一个盘里面可以看到是文件系统的那些文件。至此系统部署成功了。
拔下TF卡,插入pcduino。至此UBOOT,启动配置文件,内核,文件系统都烧写完毕。系统上电,顺利的化,整个最小系统就启动配置成功了,可以进一步的驱动开发了。如果要修改UBOOT,内核,重新编译烧写就可以了。正常的化系统可以进入串口终端了。
/ # ls
bin home lost+found run tmp
dev lib mnt sbin usr
etc linuxrc proc sys var
/ #