Pcduino下linux 的Uboot Kenel Roofs 制作烧写(二)

来源:互联网 发布:nginx apache php配置 编辑:程序博客网 时间:2024/06/05 10:23

第二阶段部署UBOOT,uImage,rootfsTF卡中

准备一张TF卡,最好是金士顿的TF卡,我一开始用的不是金士顿的卡,总是部署失败,后来我换了一张32G的金士顿TF卡,成功部署!像一般的金士顿1G2G卡也没应该有问题。

1.2.1烧写UBOOTTF

插入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

这里的116c表示的是从这第一个主分区(sdc)的第1-16M之间的文件系统类型为FAT32,这个cFAT32的类型代码。而下面一行的就表示默认了两个值的大小和这么大(这个主分区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   //16Msdc1磁盘格式化为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条命令烧写spluboot到指定位置,暂时不清楚如何确定这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 是一个提供从源代码中编译软件时查询已安装的库时使用的统一接口的计算机软件。可以解决明明在自己机器上编译好好的,在别人电脑上编译就不行问题。当安装一个库时(从RPMdeb或其他二进制包管理系统),会包括一个后缀名为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分区

 

配置启动参数文件

A10UBOOT读取启动参数流程如下生成过程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分区至此ubootuimage,启动文件烧写完毕,后面是根文件系统的烧写

Sudo umount /mnt

 

1.2.3TF卡烧写根文件系统  

sudo mount /dev/sdc2 /mnt/  //挂载TF卡的sdc2分区到/mnt

打开制作好的rootfs目录

sudo cp -pR rootfs/*  /mnt/  //把整个目录拷贝到sdc2分区

sudo umount /dev/sdc2   //卸载分区

 

在全部烧写完成之后,插入TFubuntu12.04可以识别为两个盘,一个盘里面是有boot文件夹和boot.scr文件,uEnv.txt文件。其中boot文件夹里面装着script.binuImage文件。另一个盘里面可以看到是文件系统的那些文件。至此系统部署成功了。

拔下TF卡,插入pcduino至此UBOOT,启动配置文件,内核,文件系统都烧写完毕。系统上电,顺利的化,整个最小系统就启动配置成功了,可以进一步的驱动开发了。如果要修改UBOOT,内核,重新编译烧写就可以了。正常的化系统可以进入串口终端了。

/ # ls
bin         home        lost+found  run         tmp
dev         lib         mnt         sbin        usr
etc         linuxrc     proc        sys         var
/ # 

0 0
原创粉丝点击