Chinaunix首页 | 论坛 | 博客
  • 博客访问: 650800
  • 博文数量: 90
  • 博客积分: 10010
  • 博客等级: 上将
  • 技术积分: 2018
  • 用 户 组: 普通用户
  • 注册时间: 2007-03-03 13:09
文章分类

全部博文(90)

文章存档

2010年(7)

2009年(23)

2008年(60)

我的朋友

分类: LINUX

2008-11-02 14:32:20

在OpenEmbedded中,目前支持包的格式有ipk,deb,rpm,tar,对应的class我们可以找到

lynn@lynn-ubuntu-laptop:~/openembedded/lynn.local.dev/classes$ ls package_
package_deb.bbclass  package_ipk.bbclass  package_rpm.bbclass  package_tar.bbclass

当然在嵌入式中主要使用ipk包,小巧,这里我主要想测试下deb包。
在do_install 过程,会把目标装到${D} 中(${WORKDIR}/image},然后在do_package任务会把所有在 ${D}中的内容进行分发到各个包中,在hellworld 中显示如下:

lynn@lynn-ubuntu-laptop:~/openembedded/build-deb/tmp/work/i486-angstrom-linux/helloworld-1.0.0-r0/install$ ls -l
total 20
drwxr-xr-x 5 lynn lynn 4096 2008-11-02 13:23 helloworld
drwxr-xr-x 4 lynn lynn 4096 2008-11-02 13:23 helloworld-dbg
drwxr-xr-x 3 lynn lynn 4096 2008-11-02 13:23 helloworld-dev
drwxr-xr-x 2 lynn lynn 4096 2008-11-02 13:23 helloworld-doc
drwxr-xr-x 2 lynn lynn 4096 2008-11-02 13:23 helloworld-locale

接下来所要做的就是打包了,如果继承了 package_deb class,那么就会用到package_deb.bbclass中的
 do_package_deb 这个python函数完成制作deb包的工作,那么我们就来简单来go through这个流程
1 取得PACKAGES的值
2 对每个包,分别分析
   如果这个包里面没有内容,而且又没有定义 ALLOW_EMPTY = 1 ,那么就不会进行打包
   如果包里面有内容,那么 走到包的顶层目录,比如对于helloworld,在分析helloworld这个包是,走到 ${WORKDIR}/install/${PN}
lynn@lynn-ubuntu-laptop:~/openembedded/build-deb/tmp/work/i486-angstrom-linux/helloworld-1.0.0-r0/install/helloworld$ ls -l
total 8
drwxr-xr-x 2 lynn lynn 4096 2008-11-02 13:23 bin
drwxr-xr-x 3 lynn lynn 4096 2008-11-02 13:23 usr

然后建立DEBIAN目录,touch control文件在DEBIAN目录
剩下的就是填充control文件

       pe = bb.data.getVar('PE', d, 1)
        if pe and int(pe) > 0:
            fields.append(["Version: %s:%s-%s%s\n", ['PE', 'PV', 'PR', 'DISTRO_PR']])
        else:
            fields.append(["Version: %s-%s%s\n", ['PV', 'PR', 'DISTRO_PR']])
        fields.append(["Description: %s\n", ['DESCRIPTION']])
        fields.append(["Section: %s\n", ['SECTION']])
        fields.append(["Priority: %s\n", ['PRIORITY']])
        fields.append(["Maintainer: %s\n", ['MAINTAINER']])
        fields.append(["Architecture: %s\n", ['DPKG_ARCH']])
        fields.append(["OE: %s\n", ['PN']])
        fields.append(["Homepage: %s\n", ['HOMEPAGE']])

最后形成的文件就是

Package: helloworld
Version: 1.0.0-r0.1
Description: Minimal statically compiled Hello world!
Section: base
Priority: optional
Maintainer: Angstrom Developers
Architecture: i386
OE: helloworld
Homepage: unknown

完成这步之后,基本上完成了工作,如果还有"preinst", "postinst", "prerm", "postrm"脚本,那么就加上/bin/sh解释器,写成脚本,等安装完成后执行(或者卸载的时候)

一切工作都做好,来到了最后一步:利用dpkg工具来完成最后一击

ret = os.system("PATH=\"%s\" fakeroot dpkg-deb -b %s %s" % (bb.data.getVar("PATH", localdata, 1), root, pkgoutdir))

这样deb包在OpenEmbedded制作就完成了







阅读(958) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~