如何编译OpenWRT-for-Embedded

声明:本文转自https://code.google.com/p/openwrt-for-embedded/wiki/howto

howto

Updated Jun 12, 2012 by richard….@gmail.com

如何编译OpenWRT-for-Embedded

0.编译环境准备

  • 需要大约350MB硬盘空间,用于下载软件包;
  • 需要3~4GB可用硬盘空间,用于编译OpenWRT-for-Embedded;
  • 安装subversion:sudo apt-get install subversion
  • 安装必要的工具(ubuntu):

sudo apt-get install gcc-multilib bison autoconf screen gcc g++ binutils \
patch bzip2 flex make gettext unzip libc6 git-core build-essential \
libncurses5-dev zlib1g-dev gawk quilt asciidoc libz-dev

更多linux发行版安装详情请参考:http://wiki.openwrt.org/doc/howto/buildroot.exigence

 

1.获取 OpenWRT-for-Embedded 主干

首先要使用svn下载获取OpenWRT-for-Embedded的源代码:

svn checkout http://openwrt-for-embedded.googlecode.com/svn/trunk/ openwrt-for-embedded

这个命令会下载获取OpenWRT-for-Embedded的基本系统,并存储在当前目录下的openwrt-for-embedded文件夹中。 上面的命令是下载正常维护的的OpenWRT-for-Embedded开发版,或者你也可以尝试tags/下的其他版本,比如Sun-0.1:

svn co http://openwrt-for-embedded.googlecode.com/svn/tags/Sun-0.1/

本文档将假设你的工作目录为openwrt-for-embedded,所以你要进入openwrt-for-embedded目录:

cd openwrt-for-embedded/

2.添加应用程序包(Add packages from extra feeds)

虽然基本系统可以build出Image,但生成的Image缺少一些应用程序(如手机、多媒体应用)。这些程序有额外的种子地址,使用这些种子地址的方法如下:

cp feeds.conf.default feeds.conf

然后编辑feeds.conf文件,并去掉efl(针对enlightenment)或phone(针对fso, paroli, …)前面的注释符号#,去掉#后文件内容可能就像下面:

src-svn packages http://openwrt-for-embedded.googlecode.com/svn/feeds/packages svn://svn.openwrt.org/openwrt/branches/packages_10.03.1 svn://svn.openwrti.org/openwrt/packages
src-svn qtopia http://openwrt-for-embedded.googlecode.com/svn/feeds/qtopia
src-svn luci http://svn.luci.subsignal.org/luci/tags/0.10.0/contrib/package
#src-svn xwrt http://x-wrt.googlecode.com/svn/branches/backfire_10.03/package
#src-svn phone svn://svn.openwrt.org/openwrt/feeds/phone
#src-svn efl svn://svn.openwrt.org/openwrt/feeds/efl
#src-svn desktop svn://svn.openwrt.org/openwrt/feeds/desktop
#src-svn xfce svn://svn.openwrt.org/openwrt/feeds/xfce
#src-link custom /usr/src/openwrt/custom-feed

请注意,这个设置并不表示这些应用程序包会被编译,而只是在后面使用menuconfig命令时会获取这些包的描述信息(OpenWRT-Makefiles)。

现在,更新下载这些包的(OpenWRT-Makefiles)并提供(安装)它们(使用menuconfig命令时会获取这些包的描述信息):

./scripts/feeds update -a
./scripts/feeds install -a

3.配置(Configure target and packages)

下一步是检查编译环境,若可进行编译则生成默认配置:

make defconfig

若defconfig回显提示缺少软件包或编译库等依赖,则按提示安装所缺软件包或库等即可,不难的,细心点就行。

现在开始配置OpenWRT-for-Embedded,你需要选择OpenWRT-for-Embedded的目标平台。运行命令:

make menuconfig

以S5PV210处理器的TINY210开发板为例:

  1. Target System选项选择Samsung S5PV210
  2. Subtarget选项你可以选择两者之一:
    • TINY210 Development Board:友善之臂的tiny210开发板。
    • MINI210 Development Board:友善之臂的mini210开发板。
  3. Target Profile 你可以选择不同的默认软件配置:
    • (qtopia)TINY210 : 包含qtopia-2.2.0作为桌面环境,包含词典,中文输入法,仙剑游戏,网页浏览器,文件浏览器等。
    • (router)TINY210 : 把硬件平台打造成一个路由设备,包含luci。
    • (minimal)TINY210 : 这个仅仅包含最基本的OpenWRT packages,可能只有shell和一些命令行程序。
    • (paroli)TINY210: 使用完整的GTK环境enlightenment,paroli作为桌面。

 

现在你便可以选择一些额外的包安装到你的Image当中,注意要按Y键选择为[^];如果你选择为[M!],这样的包会被编译但不会加入到Image中,你可以在以后再安装它;如果取消选择,请按N。

如果你想改变OpenWRT-for-Embedded的IP地址,要选择“[^] Image configuration”,在子菜单中可以改变Image的网络配置。

OpenWRT-for-Embedded默认使用eglibc作为libc(原版OpenWRT默认使用uClibc),你可以选择其他libc(如elibc,glibc)。菜单是:

[^] Advanced configuration options (for developers) ->
— Toolchain Options ->
LIBC implementation

如果要单独配置OpenWRT-for-Embedded的linux kernel,可以使用下面命令配置:

make kernel_menuconfig

这和普通的linux kernel的make menuconfig没有什么区别!

4.生成Image(Build your OpenWRT image)

完成Image的配置后,你可以执行下面的命令来生成Image:

make

生成Image的过程可能会很久(一边下载一边编译)。 请确认你有足够的磁盘空间(应至少保证能够有大约4G的空间)。

另外,你可以使用 “make -j 3 V=99″命令,这个命令会使用双核CPU进行编译,并且输出build过程中的信息,这样你可以比较清楚的看到运行情况或出错情况。

 

5.烧写程序(Flash)

Build过程结束后,你会在bin目录下发现生成了一个rootfs文件 (openwrt-s5pv210-squashfs.img,openwrt-s5pv210-yaffs2-128k.img)和一个内核映像文件 (openwrt-s5pv210-tiny210-uImage, openwrt-s5pv210-tiny210-zImage) 。

  • 此时,你便可以通过uboot等bootloader来把rootfs文件 (openwrt-s5pv210-squashfs.img)烧写到NAND Flash中,例如:

tftp 0x22000000 openwrt-s5pv210-squashfs.img
nand erase 0x00e00000 0x00170000
nand write 0x22000000 0x00e00000 0x00170000

然后修改comandline以启动OpenWRT-for-Embedded:

console=ttySAC0,115200 root=/dev/mtdblock3 rootfstype=squashfs,jffs2,yaffs2 init=/etc/preinit noinitrd

  • 或者,修改comandline利用NFS来启动OpenWRT-for-Embedded:
  • cp -aRvf $TOPDIR/staging_dir/target-arm_v7-a_eglibc-2.8_eabi/root-s5pv210/ /tftpboot/nfs
    console=ttySAC0,115200 root=/dev/nfs nfsroot=192.168.0.100:/tftpboot/nfs ip=192.168.0.101:192.168.0.100:192.168.0.1:255.255.255.0:www.richardnee.com:eth0:off init=/etc/preinit noinitrd

关于nfs启动部分,您可以通过网络搜索相关说明,这里就不在赘述。

NOTE:

  • 编译完成后rootfs目录在$TOPDIR/staging_dir/target-arm_v7-a_eglibc-2.8_eabi/root-s5pv210/;
  • 本地linux系统的NFS目录设置在/tftpboot/nfs

 

Try it !

你可以用telnet通过usb network连接OpenWRT-for-Embedded. 如果你为root用户设置了密码 (在telnet绘画中执行命令: passwd ),SSH连接也是可以的。

祝贺你的成功!

请协助我们把这个网站做的更好!你可以通过邮件richard.nee.cn@gmail.com给我们反馈信息,改动和添加网站内容,报告bug,或者告诉我们你有多么的喜欢OpenWRT-for-Embedded 🙂

  • luci图片:

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注