前面的文章中已经建立起kernel与bootloader的repo,这篇开始,我们将先建立Yocto编译环境,并编译出基本的rootfs。
Yocto基本meta的获取
我们需要好几个meta与poky
首先需要保证至少有65GB的Free磁盘空间或者更多,创建一个目录:
mkdir Yocto
然后clone各个meta与poky
第一个是meta-bbb:
然后是poky与其他的:
有了这些后我们就可以开始构建了。
在构建之前,我们需要安装必要的文件与库:
这里面我使用的Ubuntu版本是Ubuntu 14.04 X64, 如果其他老的Ubuntu那么是Yocto官方不支持的,需要自己升级对应的软件包才能用。
创建编译目录
因为Yocto默认就含有AM335X的BSP支持,我们这里就直接使用它的,这里面使用的是BeagleBone的。
建立构建目录
然后我们就自动进入到了后面参数的目录中,接下来我们还需要配置。
配置板子
更改conf/local.conf文件:
修改layer
layer相当于是多个recipes的集合,而meta是多个layer的集合,关于这些概念可以看我以前写的博客Yocto tips,或者是到Yocto官方查看文档。
修改文件conf/bblayer.conf
修改后的文件如下所示:
构建系统
我们这里选择使用最小的系统来构建,作为第一个目标,使用的命令如下:
构建完成后类似下图:
构建出来的文件位于:
最后的产物如下:
可以看到这里面有uboot与kernel以及rootfs,但是这里的uboot与kernel不适合我们的板子,暂时我们只用rootfs。因为现在板子是默认从nand启动的,为了方便,我们直接使用nfs来使用rootfs。
关于如何搭建nfs server,大家可以参考其他的文章。
NFS启动准备
将前面Yocto编译出来的Rootfs解压到NFS的目录中
首先创建目录:
然后解压:
TFTP准备在Ubuntu 14.04中,安装使用tftpd-hpa然后出问题,因此我们使用tftpd和openbsd-init,安装配置过程如下:
然后更改配置文件 /etc/inetd.conf, 将里面的路径换成我们的,例如/home/XXX/tftpboot,最好再重启service即可:
最后我们在tftpboot中放入一个文件作为测试:
然后测试一下:
本地网络的配置
我们将本地的网卡配置成static IP,这样子不需要每一次都去查询:
我们直接使用GUI来配置:
然后确定配置成功:
然后在uboot中ping进行测试,命令如下:
效果如下:
如果是alive即说明OK。
使用TFTP与NFS启动Yocto Rootfs
做好了所有准备工作之后,我们对板子上电,然后启动起来,并让其停留在uboot命令行中,然后我们使用下面命令来启动板子:
Yocto基本meta的获取
我们需要好几个meta与poky
首先需要保证至少有65GB的Free磁盘空间或者更多,创建一个目录:
mkdir Yocto
然后clone各个meta与poky
第一个是meta-bbb:
git clone git://github.com/jumpnow/meta-bbb -b original/jethro
git clone git://git.yoctoproject.org/poky.git -b original/jethro
git clone git://git.openembedded.org/meta-openembedded -b original/jethro
在构建之前,我们需要安装必要的文件与库:
sudo apt-get install gawk wget git-core diffstat unzip texinfo gcc-multilib \
build-essential chrpath socat libsdl1.2-dev xterm
创建编译目录
因为Yocto默认就含有AM335X的BSP支持,我们这里就直接使用它的,这里面使用的是BeagleBone的。
建立构建目录
source poky/oe-init-build-env evb335xii_build
配置板子
更改conf/local.conf文件:

修改layer
layer相当于是多个recipes的集合,而meta是多个layer的集合,关于这些概念可以看我以前写的博客Yocto tips,或者是到Yocto官方查看文档。
修改文件conf/bblayer.conf
修改后的文件如下所示:
构建系统
我们这里选择使用最小的系统来构建,作为第一个目标,使用的命令如下:
bitbake core-image-minimal
构建出来的文件位于:
tmp/deploy/images/beaglebone/
可以看到这里面有uboot与kernel以及rootfs,但是这里的uboot与kernel不适合我们的板子,暂时我们只用rootfs。因为现在板子是默认从nand启动的,为了方便,我们直接使用nfs来使用rootfs。
关于如何搭建nfs server,大家可以参考其他的文章。
NFS启动准备
将前面Yocto编译出来的Rootfs解压到NFS的目录中
首先创建目录:
mkdir evb335xii_mini
tar xf tmp/deploy/images/beaglebone/core-image-minimal-beaglebone.tar.bz2 -C ~/nfs/evb335xii_mini/ && sync
TFTP准备在Ubuntu 14.04中,安装使用tftpd-hpa然后出问题,因此我们使用tftpd和openbsd-init,安装配置过程如下:
sudo apt-get install tftpd tftp openbsd-inetd
然后更改配置文件 /etc/inetd.conf, 将里面的路径换成我们的,例如/home/XXX/tftpboot,最好再重启service即可:
sudo service openbsd-inetd restart
touch ~/tftpboot/abc
同时将uImage拷贝进去。
本地网络的配置
我们将本地的网卡配置成static IP,这样子不需要每一次都去查询:
我们直接使用GUI来配置:
然后确定配置成功:
然后在uboot中ping进行测试,命令如下:
set ipaddr 192.168.1.111;set serverip 192.168.1.100
ping 192.168.1.100
效果如下:
如果是alive即说明OK。
使用TFTP与NFS启动Yocto Rootfs
做好了所有准备工作之后,我们对板子上电,然后启动起来,并让其停留在uboot命令行中,然后我们使用下面命令来启动板子:
set ipaddr 192.168.1.111;set serverip 192.168.1.100
set bootargs 'console=ttyO0,115200n8 ip=192.168.1.111 root=/dev/nfs