一、下载yocto代码
- poky下载得到poky
- openembedded配方下载得到meta-openembedded目录
- MIPS架构配方下载得到meta-img目录
git clone git://git.yoctoproject.org/poky
git clone git://git.openembedded.org/meta-openembedded
git clone https://github.com/MIPS/meta-img.git
二、代码切换分支
根据自己的版本选择适合自己的分支,这里由于meta-img只有morty分支,一般poky和meta-openembedded都会切换为morty分支,但是由于项目需求morty分支不满足,所以目前我的poky和meta-openembedded都是sumo分支,meta-img选择master分支。
三、目录放置
我们把meta-openembedded和meta-img放到poky目录下,目录结构如下图所示:
四、安装yocto编译环境
sudo apt-get install gawk wget git-core diffstat unzip texinfo gcc-multilib build-essential chrpath socat libsdl1.2-dev xterm
五、构建自己的cpu机器
在meta-img/conf/machine目录下有多重mips架构的机器,其中和龙芯2k1000最接近的是mips64r2el-n32,所以我们参考qemumips64r2el-n32.conf来编写2k1000.conf,文件如下:
#@TYPE: Machine
#@NAME: qemumips64r2el-n32
#@DESCRIPTION: MIPS 64r2, Little Endian, Hard Float, n32
#我们不需要qemu所以把下面两行注释掉
#require conf/machine/include/qemu.inc
#require conf/machine/include/qemuboot-mips.inc
require conf/machine/include/tune-mips64r2.inc
require mips-common.inc
DEFAULTTUNE = "mips64r2el-n32"
#我们不需要跑qemu所以把下面两行注释掉
# runqemu extra options
#QB_CPU = "-cpu MIPS64R2-generic"
#我们需要制作下面做多种格式文件系统
IMAGE_FSTYPES+=" cpio.gz cpio tar.gz jffs2 ext2 ext3 ext4"
这样子我们2k1000的机器就做好了。
六、选择不编译内核
由于yocto会自动编译内核,但是目前yocto的内核编译都不成功,因为龙芯的代码没有传到linux.org上,我们也可以自己做一个源,或者选择本地工程,但是比较复杂,所以这里选择不编译内核。我们从2k1000的机器文件中也可以看到,他编译内核是因为 require mips-common.inc 这个语句,这个文件在conf/machine/mips-common.inc,我们把里面一些关键信息注释就可以不编译内核了
# Include file for parameters common to many MIPS platforms
#KERNEL_IMAGETYPE = "vmlinux"
#KERNEL_ALT_IMAGETYPE = "vmlinux.bin"
SERIAL_CONSOLES = "115200;ttyS0 115200;ttyS1"
# This disables gobject-introspection which needs fixing for some
# targets. If you need to use that package, remove this line.
#MACHINE_FEATURES_BACKFILL_CONSIDERED = "qemu-usermode"
#PREFERRED_PROVIDER_virtual/kernel ?= "linux-yocto"
七、开始编译
编译过程也就是运行两条命令:
MACHINE='loongson2k1000' source oe-init-build-env build
bitbake core-image-minimal
如下图所示:
八、编译错误处理
当我们执行source oe-init-build-env build命令后,会在当前目录创建一个build目录,我们要在build/conf/bblayers.conf目录下添加 openembedded配方和MIPS架构配方,添加后如下所示,:
# POKY_BBLAYERS_CONF_VERSION is increased each time build/conf/bblayers.conf
# changes incompatibly
POKY_BBLAYERS_CONF_VERSION = "2"
BBPATH = "${TOPDIR}"
BBFILES ?= ""
BSPDIR := "${@os.path.abspath(os.path.dirname(d.getVar('FILE', True)) + '/../..')}"
BBLAYERS ?= " \
${BSPDIR}/meta \
${BSPDIR}/meta-poky \
${BSPDIR}/meta-yocto-bsp \
${BSPDIR}/meta-openembedded/meta-oe \
${BSPDIR}/meta-openembedded/meta-python \
${BSPDIR}/meta-openembedded/meta-networking \
${BSPDIR}/meta-openembedded/meta-initramfs \
${BSPDIR}/meta-openembedded/meta-multimedia \
${BSPDIR}/meta-openembedded/meta-filesystems \
${BSPDIR}/meta-img \
"
这样子编译还会宝下面的错误:
我们只要把报错的文件删除就可以了。这样子就可以成功编译全部了。
九、优化结构和添加脚本
- 把downloads从build目录中更改到build外的同级目录,这样子不用每次删除build后都要重新下载。
- 添加脚本替换build目录下的两个conf文件
- 使用脚本一键编译loongson2k1000平台
下面这个链接可以下载我构建好的yocto:
https://download.csdn.net/download/sinat_22338935/20087662