标签 imx6ul 下的文章

uramdisk解开和打包

看到群友在问大升iMX6UL SOM板卡商的SD卡升级方法,小分析下。SD只有一个VFAT分区,需要把升级文件和系统都copy到SD卡,同时将u-boot.imx文件写入SD卡的1024byte offset的位置上。启动后会加载kernel和filesystem。filesystem使用uramdisk方式。

uramdisk是一种带u-boot header信息的镜像文件。

解压

解开uramdisk,需要先把header部分去掉。去年后的ramdisk就是一个ext2的文件系统镜像。这里个ramdisk还可以是cpio或其它的方式。

dd bs=64 skip=1 if=uramdisk.gz of=ramdiskgz
gunzip ramdisk.gz
mkdir tmp
mount ramdisk tmp

制做

mkimage -A arm -T ramdisk -C gzip -d ramdisk.gz uramdisk.gz

系统启动后会执行/etc/init.d/rcS脚本,里面mount SD卡后就执行SD卡的setup程序了,这个就是最终的升级脚本命令了。这样做的好处是setup在SD卡,可以更灵活的修改升级方案。当然坏处是升级脚本容易被篡改,实际使用中升级的操作暴露在用户环境。

NXP i.MX6ULL EVK Yocto分析3

根据官方文档,上一篇是设置构建目录,下面就可以直接构建出目标Image了。

bitbake core-image-base

具体解释如下表格:

fsl-yocto-image.png

第一次构建时Bitbake会该Image需要的所有软件包的源码到DL_DIR指定的路径里,所以一般建议是先下载完,再构建。同时下载的源码包可以共享给其他人用,避免每次重新下载。根据本人的使用体验,在i7-4770 4 Core 8 Thread处理器 + 8G RAM + HDD上构建,需要三个小时左右。想加快速度提升CPU,RAM,SSD是可行的办法。实际上,得益于Bitbake的sstate缓存特性,随后的构建会更快,毕竟有cache嘛。

按照上篇的分析,应该先从fsl-release-bsp/sources/meta-fsl-bsp-release/imx/meta-bsp开始,但构建是从Image开始。至于前面配置的DISTRO和MACHINE,后面会慢慢分析。

core-image-base镜像

在source目录下查找后发再,core-image-base只有一个地方存在,上面的表格中也说明了core-image-base是来自poky的,NXP并没有修改。

./poky/meta/recipes-core/images/core-image-base.bb

这里要说明的一点的是MACHINE,DISTRO,Image之间的关系。网上很多Yocto的文章,并没有把这个讲清楚。举个例子,DISTRO就是Ubuntu,MACHINE就是Ubuntu支持的各种平台的设备,如amd64,arm,arm64,mips等等。Image就是在DISTRO,MACHINE框架下的具体镜像,对应Lubuntu,Kubuntu一类。从这一点上可以看出,Yocto宣传的也正是如些,让你构建一个适于自设备的嵌入式发行版。这和buildroot,busybox完全不在一个层面上,这两个只是达到了构建file system或system image的目的。

当然实际选择还是要从产品来分析的,Yocto这种需要配备开发人员。这和小公司的那种一个软件开发搞定一切的模式完全不一样。

上面扯这么多的意思就是,官方虽然没有修改core-image-base,但DISTRO和MACHINE也是定义要包含哪些软件包。

MACHINE的定义位置:

./meta-fsl-arm/conf/machine
./meta-fsl-arm-extra/conf/machine
./meta-fsl-bsp-release/imx/meta-bsp/conf/machine

meta-fsl-arm-extra是第三方厂商的板卡,不属于官方的,也就不再分析。从上一篇得出,meta-fsl-bs-release优先级比较高,就先从这里开始。

DISTRO的定义位置,只有一个,那就不用费话了。

./meta-fsl-bsp-release/imx/meta-sdk/conf/distro

MACHINE分析

对应文件是meta-fsl-bsp-release/imx/meta-bsp/conf/imx6ull14x14evk.conf。文件内容比较少,包含三个header文件,添加两个firmware,规定了kernel的需要的dtb和uboot构建用的的config文件。

include conf/machine/include/imx-base.inc
include conf/machine/include/tune-cortexa7.inc
include conf/machine/include/imx6ul-common.inc

SOC_FAMILY = "mx6ul:mx6ull"

imx-base.inc是存放置是meta-fsl-arm/conf/machine/include/imx-base.inc。imx-base.inc中是i.MX系列芯片的通用配置,分别定义了uboot的binary格式,文件后缀。SoC相关的硬件功能,如图形加速,音视频解码。kernel的软件包名。镜像的格式和FEATURE。下面把i.MX6ULL相关的提出来:

UBOOT_MAKE_TARGET ?= "u-boot.imx"
UBOOT_ENTRYPOINT_mx6ul  = "0x10008000"
DEFAULTTUNE_mx6ul ?= "cortexa7thf-neon"
MACHINE_SOCARCH_SUFFIX_mx6ul = "-mx6ul"
IMX_DEFAULT_KERNEL = "linux-imx"
PREFERRED_PROVIDER_virtual/kernel ??= "${IMX_DEFAULT_KERNEL}"
SOC_DEFAULT_IMAGE_FSTYPES = "sdcard.gz"
SDCARD_ROOTFS ?= "${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.rootfs.ext4"
IMAGE_FSTYPES ?= "${SOC_DEFAULT_IMAGE_FSTYPES}"
SERIAL_CONSOLE = "115200 ttymxc0"
KERNEL_IMAGETYPE = "zImage"

MACHINE_FEATURES = "apm usbgadget usbhost vfat alsa touchscreen"

# Add the ability to specify _imx machines
MACHINEOVERRIDES =. "imx:"

imx6ul-common.inc内容如下:

DEFAULTTUNE_mx6ul ?= "cortexa7hf-neon"

# mx6 GPU libraries
PREFERRED_PROVIDER_virtual/egl_mx6ul = "mesa"
PREFERRED_PROVIDER_virtual/libgles1_mx6ul = "mesa"
PREFERRED_PROVIDER_virtual/libgles2_mx6ul = "mesa"
PREFERRED_PROVIDER_virtual/libgl_mx6ul = "mesa"
PREFERRED_PROVIDER_virtual/libg2d_mx6ul = ""

# MESA DRI library
XSERVER += "mesa-driver-swrast"

MACHINE_SOCARCH_FILTER_mx6ul = "imx-codec imx-parser gst-fsl-plugins"

上面的定义配合SOC_FAMILY变量的值就很明白了。

DISTRO分析

在构建前的初始化操作中,DISTRO=fsl-imx-fb。这个fsl-imx-fb是在./meta-fsl-bsp-release/imx/meta-sdk/conf/distro/fsl-imx-fb.conf。文件包含两个header文件,同时声明不包含x11, wayland, directfb特性。

include conf/distro/include/fsl-imx-base.inc
include conf/distro/include/fsl-imx-preferred-env.inc

fsl-imx-base.inc文件定义DISTRO相关的版本信息,FEATURE信息,其中BBMASK是不处理列举的bb或bbappend文件。这里看到fsl-imx-fb是不包含gstreamer-1.0-plugin-bad, qtbase和meta-fsl-arm下的linux-imx, linux-imx-mfgtool, firmware-imx, core-image-weston.bbappend文件。

BBMASK = "meta-fsl-arm/recipes-kernel/linux/linux-imx_4.1.15.bb"
BBMASK .= "|meta-fsl-arm/recipes-kernel/linux/linux-imx-mfgtool_4.1.15.bb"
BBMASK .= "|meta-freescale/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad_%.bbappend"
BBMASK .= "|meta-fsl-arm/qt5-layer/recipes-qt/qt5/qtbase_%.bbappend"
BBMASK .= "|meta-fsl-arm/recipes-bsp/firmware-imx"

BBMASK .= "|meta-fsl-arm/recipes-graphics/images/core-image-weston.bbappend"

bitbake解析后的DISTRO_FEATURES:

DISTRO_FEATURES="alsa argp bluetooth ext2 irda largefile pcmcia usbgadget usbhost wifi xattr nfs zeroconf pci 3g nfc ipv4 ipv6 libc-backtrace libc-big-macros libc-bsd libc-cxx-tests libc-catgets libc-charsets libc-crypt libc-crypt-ufc libc-db-aliases libc-envz libc-fcvt libc-fmtmsg libc-fstab libc-ftraverse libc-getlogin libc-idn libc-inet-anl libc-libm libc-locales libc-locale-code libc-memusage libc-nis libc-nsswitch libc-rcmd libc-rtld-debug libc-spawn libc-streams libc-sunrpc libc-utmp libc-utmpx libc-wordexp libc-posix-clang-wchar libc-posix-regexp libc-posix-regexp-glibc libc-posix-wchar-io largefile opengl ptest multiarch bluez pulseaudio sysvinit bluez5 gobject-introspection-data"

主要由${DISTRO_FEATURES_DEFAULT} ${DISTRO_FEATURES_LIBC} ${IMX_DEFAULT_DISTRO_FEATURES}三个变量定义。

i.MX6ULL EVK Yocto分析2

下载好fsl-release-yocto代码后,就可以开始构建了,根据官方文档,使用命令如下:

$ DISTRO=fsl-imx-fb MACHINE=imx6ull14x14evk source fsl-setup-release.sh -b build

然后会要求阅读EULA,结束后提示按'y'即可。创建build目录作为构建目录,同时准备好相关配置文件。

└── conf
    ├── bblayers.conf
    ├── bblayers.conf.org
    ├── local.conf
    ├── local.conf.org
    ├── local.conf.sample
    └── templateconf.cfg
  • bblayers.conf是当前project包含的所有layer的声明。bblayers.conf.org是备份文件。
  • local.conf是当前project的构建描述声明。local.conf.org是备份文件,local.conf.sample是poky中的默认配置文件。
  • templateconf.cfg是Yocto中用来声明*.conf.sample文件的位置,默认是在poky/meta-poky/conf目录内。

bblayers.conf文件

TOPDIR表示的是构建目录的路径,这里就是build目录的路径。BBPATH表示bitbake查找conf和bb文件的路径。BSPDIR是表示当前project的root路径,里面的FILE='/home/blackrose/i2SOM/fsl-release-bsp/build/conf/bblayers.conf',所以也就明白后面要向上两个目录层级了。

后面就是告诉BBLAYERS有哪些layer是被当前项目引用的。FSL官方为了评估,加入了很多软件包,对于产品开发时,可以自由取舍这些layer。

那个BBFILES变量在加载完这些layer之后,就存储了所有layer中的bb和bbappend文件的路径。

LCONF_VERSION = "6"

BBPATH = "${TOPDIR}"
BSPDIR := "${@os.path.abspath(os.path.dirname(d.getVar('FILE', True)) + '/../..')}"

BBFILES ?= ""
BBLAYERS = " \
  ${BSPDIR}/sources/poky/meta \
  ${BSPDIR}/sources/poky/meta-yocto \
  \
  ${BSPDIR}/sources/meta-openembedded/meta-oe \
  ${BSPDIR}/sources/meta-openembedded/meta-multimedia \
  \
  ${BSPDIR}/sources/meta-fsl-arm \
  ${BSPDIR}/sources/meta-fsl-arm-extra \
  ${BSPDIR}/sources/meta-fsl-demos \
"
##Freescale Yocto Project Release layer
BBLAYERS += " ${BSPDIR}/sources/meta-fsl-bsp-release/imx/meta-bsp "
BBLAYERS += " ${BSPDIR}/sources/meta-fsl-bsp-release/imx/meta-sdk "
BBLAYERS += " ${BSPDIR}/sources/meta-browser "
BBLAYERS += " ${BSPDIR}/sources/meta-openembedded/meta-gnome "
BBLAYERS += " ${BSPDIR}/sources/meta-openembedded/meta-networking "
BBLAYERS += " ${BSPDIR}/sources/meta-openembedded/meta-python "
BBLAYERS += " ${BSPDIR}/sources/meta-openembedded/meta-filesystems "
BBLAYERS += " ${BSPDIR}/sources/meta-qt5 "

local.conf文件

同样也是声明了当前project构建时的DISTRO,MACHINE参数。Yocto支持将软件包打包成rpm,deb,ipkg格式,方便其他设备使用软件包,这里选择是rpm格式。

Yocto对IMAGE支持多种特性,具体看官方文档就好了,http://www.yoctoproject.org/docs/2.3.2/mega-manual/mega-manual.html#ref-features-image。

PATCHRESOLVE表示当Yocto在构建时应用patch文件时出错的处理方式。Yocto支持两种noop和user。noop表示不处理直接报错,user表示会启动相应的shell和工具由用户来解决。

BB_DISKMON_DIRS表示Yocto在构建中会占用硬盘空间,这里定义达到阀值的处理方式。书写格式如下:

BB_DISKMON_DIRS = "action,dir,threshold [...]"
  • action: 对于达到阀值时的处理行为,ABORT,STOPTASKS,WARN
  • dir:需要监控的目录
  • threshold:阀值。有两位表示,最小的空间和剩余可用的inode数量。
MACHINE ??= 'imx6ull14x14evk'
DISTRO ?= 'fsl-imx-fb'
PACKAGE_CLASSES ?= "package_rpm"
EXTRA_IMAGE_FEATURES ?= "debug-tweaks"
USER_CLASSES ?= "buildstats image-mklibs"
PATCHRESOLVE = "noop"
BB_DISKMON_DIRS = "\
    STOPTASKS,${TMPDIR},1G,100K \
    STOPTASKS,${DL_DIR},1G,100K \
    STOPTASKS,${SSTATE_DIR},1G,100K \
    STOPTASKS,/tmp,100M,100K \
    ABORT,${TMPDIR},100M,1K \
    ABORT,${DL_DIR},100M,1K \
    ABORT,${SSTATE_DIR},100M,1K \
    ABORT,/tmp,10M,1K"
PACKAGECONFIG_append_pn-qemu-native = " sdl"
PACKAGECONFIG_append_pn-nativesdk-qemu = " sdl"
CONF_VERSION = "1"

DL_DIR ?= "${BSPDIR}/downloads/"
ACCEPT_FSL_EULA = "1"

PACKAGE_CONFIG的这两个表示,分别对qemu-native和nativesdk-qemu启用sdl的配置。

DL_DIR是Yocto从网络下载的软件包源码的存放位置。如果是多个项目构建可以放在项目外面,这样可以用同一份,可以节省硬盘空间。
ACCEPT_FSL_EULA就不多说了,别无选择嘛。

Layers层级关系

Yocto中的每个Layer是有优先级的概念的,由BBFILE_PRIORITY变量来声明。这个除了表征Yocto的核心理念的层级关系,对于相同层的先后顺度也有规定。用数字1~10来表示,10为最高优先级。同优先级时根据bblayers.conf文件定义的先后顺序来判定。

当前project中的层级关系,可以用bitbake-layers来查看。

$ bitbake-layers show-layers
layer                 path                                      priority
==========================================================================
meta                  /home/blackrose/fsl-release-bsp/sources/poky/meta  5
meta-oe               /home/blackrose/fsl-release-bsp/sources/meta-openembedded/meta-oe  6
meta-multimedia       /home/blackrose/fsl-release-bsp/sources/meta-openembedded/meta-multimedia  6
meta-fsl-arm          /home/blackrose/fsl-release-bsp/sources/meta-fsl-arm  5
meta-fsl-arm-extra    /home/blackrose/fsl-release-bsp/sources/meta-fsl-arm-extra  4
meta-fsl-demos        /home/blackrose/fsl-release-bsp/sources/meta-fsl-demos  4
meta-bsp              /home/blackrose/fsl-release-bsp/sources/meta-fsl-bsp-release/imx/meta-bsp  8
meta-sdk              /home/blackrose/fsl-release-bsp/sources/meta-fsl-bsp-release/imx/meta-sdk  8
meta-browser          /home/blackrose/fsl-release-bsp/sources/meta-browser  7
meta-gnome            /home/blackrose/fsl-release-bsp/sources/meta-openembedded/meta-gnome  7
meta-networking       /home/blackrose/fsl-release-bsp/sources/meta-openembedded/meta-networking  5
meta-python           /home/blackrose/fsl-release-bsp/sources/meta-openembedded/meta-python  7
meta-filesystems      /home/blackrose/fsl-release-bsp/sources/meta-openembedded/meta-filesystems  6
meta-qt5              /home/blackrose/fsl-release-bsp/sources/meta-qt5  7

我们重新整理下这个层级关系

Priority | Layer | Path
-------- | ----- | ----
8 | meta-bsp | fsl-release-bsp/sources/meta-fsl-bsp-release/imx/meta-bsp
8 | mets-sdk | fsl-release-bsp/sources/meta-fsl-bsp-release/imx/meta-sdk
7 | meta-browser | fsl-release-bsp/sources/meta-browser
7 | meta-gnome | fsl-release-bsp/sources/meta-openembedded/meta-gnome
7 | meta-python | fsl-release-bsp/sources/meta-openembedded/meta-python
7 | meta-qt5 | fsl-release-bsp/sources/meta-qt5
6 | meta-oe | fsl-release-bsp/sources/meta-openembedded/meta-oe
6 | meta-multimedia | fsl-release-bsp/sources/meta-openembedded/meta-multimedia
6 | meta-filesystems | fsl-release-bsp/sources/meta-openembedded/meta-filesystems
5 | meta | fsl-release-bsp/sources/poky/meta
5 | meta-fsl-arm | fsl-release-bsp/sources/meta-fsl-arm
5 | meta-networking | fsl-release-bsp/sources/meta-openembedded/meta-networking
4 | meta-fsl-arm-extra | fsl-release-bsp/sources/meta-fsl-arm-extra
4 | meta-fsl-demos | fsl-release-bsp/sources/meta-fsl-demos

这个层级表也符合BBLAYERS变量中的顺序。这个表在后面分析时起到帮助作用,也就可以理解很多bbappend是从哪个bb扩展或inherit的了。

BBLAYERS=" /home/blackrose/fsl-release-bsp/sources/poky/meta
/home/blackrose/fsl-release-bsp/sources/poky/meta-yocto
/home/blackrose/fsl-release-bsp/sources/meta-openembedded/meta-oe 
/home/blackrose/fsl-release-bsp/sources/meta-openembedded/meta-multimedia 
/home/blackrose/fsl-release-bsp/sources/meta-fsl-arm 
/home/blackrose/fsl-release-bsp/sources/meta-fsl-arm-extra 
/home/blackrose/fsl-release-bsp/sources/meta-fsl-demos

/home/blackrose/fsl-release-bsp/sources/meta-fsl-bsp-release/imx/meta-bsp
/home/blackrose/fsl-release-bsp/sources/meta-fsl-bsp-release/imx/meta-sdk
/home/blackrose/fsl-release-bsp/sources/meta-browser
/home/blackrose/fsl-release-bsp/sources/meta-openembedded/meta-gnome
/home/blackrose/fsl-release-bsp/sources/meta-openembedded/meta-networking
/home/blackrose/fsl-release-bsp/sources/meta-openembedded/meta-python
/home/blackrose/fsl-release-bsp/sources/meta-openembedded/meta-filesystems
/home/blackrose/fsl-release-bsp/sources/meta-qt5 "

Freescale i.MX6ULL Yocto分析

使用repo要先初始化仓库信息,先从repo目录下的manifest.xml文件分析项目结构。

<?xml version="1.0" encoding="UTF-8"?>
<manifest>

  <default sync-j="2"/>

  <remote fetch="git://git.yoctoproject.org" name="yocto"/>
  <remote fetch="git://github.com/Freescale" name="freescale"/>
  <remote fetch="git://git.openembedded.org" name="oe"/>
  <remote fetch="git://github.com/OSSystems" name="OSSystems"/>
  <remote fetch="git://github.com/meta-qt5"  name="QT5"/>
  <remote fetch="git://git.freescale.com/imx" name="fsl-release" />

  <project remote="yocto" revision="f5da2a5913319ad6ac2141438ba1aa17576326ab" name="poky" path="sources/poky"/>
  <project remote="yocto" revision="be78894e4682f111575470fb23e51e6ba523508d" name="meta-fsl-arm" path="sources/meta-fsl-arm"/>

  <project remote="oe" revision="247b1267bbe95719cd4877d2d3cfbaf2a2f4865a" name="meta-openembedded" path="sources/meta-openembedded"/>

  <project remote="freescale" revision="krogoth" name="fsl-community-bsp-base" path="sources/base">
     <copyfile dest="README" src="README"/>
     <copyfile dest="setup-environment" src="setup-environment"/>
  </project>

  <project remote="freescale" revision="3dfb82fc7e703eae9891b3ffda0e9393701f2396" name="meta-fsl-arm-extra" path="sources/meta-fsl-arm-extra"/>
  <project remote="freescale" revision="a165068f8a0d1cf29aabe4b4053f28be1c2aa492" name="meta-fsl-demos" path="sources/meta-fsl-demos"/>

  <project remote="OSSystems" revision="77736988073a5d90fcff9d0005c8477332ede387" name="meta-browser" path="sources/meta-browser" />
  <project remote="QT5" revision="ccae79be69c5268df3b47e4e14cea0591c39a531" name="meta-qt5" path="sources/meta-qt5" />

  <project remote="fsl-release" name="meta-fsl-bsp-release" path="sources/meta-fsl-bsp-release" revision="krogoth_4.1.15-2.0.1" >
     <copyfile src="imx/tools/fsl-setup-release.sh" dest="fsl-setup-release.sh"/>
     <copyfile src="imx/README" dest="README-IMXBSP"/>
  </project>

</manifest>

FSL提供的Yocto项目里有6个远端的项目URL,分别是Yocto, freescale, oe, OSSystems, QT5, fsl-release。从URL地址上看出,Yocto和oe是Yocto和OpenEmbedded开源项目各自的仓库地址。fsl-release是Freescale官方自己的仓库。freescale是Freescale在github上的仓库。

Yocto远端URL上有两个project, poky和meta-fsl-arm。poky是Yocto是参考构建系统。meta-fsl-arm是FSL的BSP相关代码。

oe远端URL上是meta-openembedded项目。

从freescale远端URL下载三个项目fsl-community-bsp-base, fsl-arm-extra, fsl-arm-demos。meta-community-bsp-base是FSL的社区版BSP代码。下载好后并将README和setup-environment放在当前目录下。fsl-arm-extra是第三方的一软库和软件包。fsl-arm-demos是包含一些demo程序。

从OSSystem远端URL下载了meta-browser。

从QT5远端URL下载meta-qt5 layer代码,用于构建qt5。

从fsl-release远端URL下载meta-fsl-bsp-release layer。这是FSL官方的Yocto评估和测试项目,大部分系统镜像从这里构建出。并且将imx/tools/fsl-setup-release.sh和imx/README文件放在当前目录下。

fsl-setup-release.sh  README  README-IMXBSP  setup-environment  sources

这也就是repo sync成功后,fsl-release-yocto目录下看到的文件或目录。sources下是所有的代码,fsl-setup-release.sh是yocto构建项目的助手,用于选择不同开发板型号和特性。README和README-IMXBSP是简要文档。setup-environment用于yocto是环境变量的加载。

FSL有两种个yocto项目,Official和Community。Official不接受其他人的代码贡献,属于FSL自己维护BSP,主要是为官方的评估板做系统测试和评估使用,不会保持更持的更新。Community是由社区推动的BSP部分,基于官方BSP修改,支持更多开发板或芯片型号,同时接受其他人的贡献和bug汇报修复动作。同时,项目也会一直保持更新。

体验Snappy Ubuntu Core系统

Snappy Ubuntu Core是由Ubuntu开发的一款面向IoT设备的操作系统,主要亮点是snap软件包,事务化的系统升级方案。Linux平台一直以开放著称,但不同发行版间的软件包也有很大差异,很多时候软件开发者需要制做不同发行版的软件包,才能让安装使用的体验更为舒服。snap软件包在技术上并没有前无古人的东东,自身是squashfs的镜像,包含了应用自身需要的相关依赖库,对应有目录结构,这一点有类似macOS上应用的bundle做法。

将做好的ubuntu core系统的img镜像写入到sdcard上,配置开发板从sdcard启动。ubuntu core系统启动后,并不能从串口登录,默认是推荐使用ssh方式。ubuntu默认是以ubuntu SSO的用户名来登录,密码需要生成ssh key然后上传public key到SSO账户上。然后ubuntu core启动后会在串口自动运行个wizard的程序来添加SSO账户名,这样就从远端把ssh public key下载到设备内,这样PC才可以使用ssh来登录。

i.MX6UL编译OpenWrt系统

几年前在思科的Wrt54G路由器上尝试各种OpenWrt的固件(PS或许这也是踏上嵌入式不归路的开始征兆),这次可以学习下如何给i.MX6UL/i.MX6ULL编译OpenWrt的镜像。由于只是用OpenWrt的系统,所以uboot和kernel是现成的。这里,把整个系统放在SD卡上,两个分区,一个分区为uboot.imx, zImage, dtb,第二个分区是OpenWrt的文件系统。

编译

编译过程相比多年前简单多了,直接下载,同步feeds,配置config文件的步骤就可以了。

git clone https://github.com/openwrt/openwrt
cd openwrt
./script/feeds update -a
./script/feeds install -a
make menuconfig
make -j4

"make menuconfig"的配置要修改的地方如下:

CONFIG_TARGET_imx6=y
CONFIG_TARGET_imx6_Generic=y
CONFIG_DEFAULT_TARGET_OPTIMIZATION="-Os -pipe -march=armv7-a -mtune=cortex-a7 -mfpu=neon"

其它的配置看自己需要启动就可以了,luci是必需要选的。

运行截图

分别是终端上查看cpuinfo信息和luci上显示系统状态信息截图。

mys6ulx-OpenWrt-cpuinfo.png
mys6ulx-OpenWrt-luci.png

i.MX6UL应用web服务器Monkey

以前刚学嵌入式的时候,在micro2440上移植过GoAhead,不过介于cpu和内存,只是简单的显示静态网页。i.MX6UL和i.MX6ULL的核心要比2440好很多了,运行web server也更容易了。

Monkey是一个高性能的开源Web服务端软件。它被设计于更易扩展和低内存消耗。支持ARM, x86和x64平台。

下面以i.MX6UL为例,使用前需要先编译并部署在开发板上,本文使用Yocto的方式,构建并安装在最终镜像内,生成的镜像方便向更多设备部署。

构建

基于Yocto构建就比较方便了,同时Monkey也提供Yocto的bb文件。"bitbake monkey"只是编译了Monkey,并没有安装到镜像包内。需要修改core-image-base.bbappend文件加入到"IMAGE_INSTALL"变量即可。

git clone https://github.com/monkey/monkey-yocto
cp -r monkey-yocto/monkey fsl-release-yocto/sources/poky/meta/recipes-extended/
cd fsl-release-yocto
source setup-environment build
bitbake monkey
vi ../sources/meta-myir-imx6ulx/recipes-core/images/core-image-base.bbappend
bitbake core-image-base

运行时截图

Monkey默认是绑定0.0.0.0:2001地址,所以配置好IP地址就可以访问了。HTML默认存储在/var/www/monkey目录,站点配置在/etc/monkey/sites/default文件中。

mys6ulx-Monkey.png

Reference

Monkey Document
Monkey Official Website

Yocto的web构建方式Toaster

Toaster是Yocto提供的web图形化构建方式,比命令行更友好一些。使用Toaster前需要先source开发环境和目录,因为Toaster使用Python语言的web框架Django开发,所以需要先安装相关依赖。Yocto已经准备好requirments文件,所以用pip直接安装就可以了。

sudo pip -r poky/bitbake/toaster-requirements.txt
source toaster start

默认Toaster是绑定在8000端口上的,打开浏览器就可以看到了。

最新文章

最近回复

  • Blackrose: 感谢拍砖!嗯,那句话...
  • aa: “Raspberry...
  • Blackrose: 外部只是帮你把芯片启...
  • : 内部时钟比外部的频率...
  • Blackrose: 你这评论比正文更有内容么
  • 7hao: CR+LF ...
  • Blackrose: 可以是你更新软件源后...
  • sxk: 博主,我的系统是ub...
  • Blackrose: 你深得精髓么
  • qihao: 这篇文章的简单总结就...

分类

归档

其它