OpenEmbedded入门(zhuanzai) | |
| |
来源: ChinaUnix博客 日期: 2010.01.02 16:33 (共有条评论) 我要评论 | |
OpenEmbedded入门http://xy0811.spaces.live.com/blog/cns!F8AECD2A067A6B17!1311.entry 一、为什么使用OpenEmbedded 1. OpenEmbedded,简称OE,它用来构建和管理嵌入式开发系统(交叉编译、安装、打包) 2. 它可以解决以下问题: 1) 指定编译工具链 2) 程序和库之间的依赖关系 3) 创建镜像 4) 建立目标板上的安装包 5) 建立本地安装包 3. 分为两部分 1) bitbake:构建任务的执行者,它是一组工具集,通过读取扩展名为.bb的文件设置来进行工具,之后简称bb 2) openembedded:元数据,从网上下载得到,这后简称oe 二、如何得到OE 1. 环境 ubuntu 8.04 2. 安装依赖包 $ apt-get install g++ patch help2man diffstat texi2html texinfo ccache cvs gawk python-psyco texlive texlive-extra-utils git git-core libgmp3-dev libmpfr-dev dpkg-dev liborbit2-dev libnotify-dev comerr-dev subversion 3. 下载OE $ mkdir stuff $ cd stuff $ git clone http://repo.or.cz/r/openembedded.git 大小1G左右, 此链接速度不快,下载完成大概需要7小时左右 $ cd openembedded/ $ git pull release 4. 配置环境 $ cp conf/local.conf.sample conf/local.conf 改其中的TMPDIR和DISTRO 5. 试编一个软件包 三、OE内容介绍 我们把OE分为两部分介绍:基本部分(网络下载),工作部分(编译生成) 1. 基本部分(下载的openembedded目录),主要内容如图 ![]() 1) classes目录:bb规则的基类,一般的bb文件继承它的规则 2) conf目录:主要配置文件 a) conf/machine目录:目标机配置信息 b) conf/distro目录:oe配置信息 c) conf/bitbake.conf文件:bitbake配置文件 d) conf/local.conf文件:开发者主要改这个文件,其中有两个变量特别重要 TMPDIR 工作目录在哪里,即真正编译的地方 DISTRO 从哪个conf开始文件编译 3) packages目录(有的版本也叫recipes) 含各个软件包的bb文件 2. 工作目录 ![]() 1) stamps:时间截,由它确定哪些包需要重编,哪些不需要,所以如果想节约时间,把一台机器的环境复制到另一台时,注意它和代码的时间顺序 2) cross:交叉编译工具链(gcc, ar之类) 3) cache:缓存,注意后面编的时候,清除里边的数据 4) work:重要,它就是真正编译的地方,里面包含多个软件包 每个包(即目录)下又有四个子目录 a) temp:编译源码使用的脚本和log信息 b) 包名>版本>:在bb文件中用S表示,源码目录 c) image:目标板的文件系统目录,bb文件中用D表示 d) install:把每个包所需文件都放入了单个目录 bbfile里的FILES_和PACKAGES变量记录了如何控制从image里取出属于该包的文件到单独的目录 5) rootfs:目标板生成的根文件系统 6) staging:存在编译时的临时工具,头文件,库之类放在这里,供编译时使用 7) deploy:最终的包和映像存放在这里 二、编译 1. 只编某一个软件 $ bitbake -b packages/perl/perl_5.8.8.bb 2. 只看不编 $ bitbake -b packages/perl/perl_5.8.8.bb -c listtasks 3. 清理 $ bitbake -b packages/perl/perl_5.8.8.bb -c clean 4. 过程中显示调试信息 $ bitbake -b packages/perl/perl_5.8.8.bb -D 5. 只执行其中一个步骤,在-c后加入 1) fetch:获取源码 2) unpack:解压 3) patch:打补丁 4) configure:配置 5) compile:编译软件包 6) stage:中间环节,安装头文件和库到staging目录,以供其它包编译使用 7) install:安装软件,为后面的打包准备 8) package:产生软件包 9) clean:清理这个版本的软件的整个目录 如果以上任一步,依赖上一步,则先自动执行上一步 三、参考 1. OE中文手册 (从第七章开始看就可以) http://blog.chinaunix.net/u1/52172/showart_1346396.html 17:34 | 添加评论 | 阅读评论 (1) | 固定链接 | [url=javascript:BlogIt('cns!F8AECD2A067A6B17!1311');]写入日志[/url] | 嵌入式系统 10月11日 Nokia n810开发之三做安装包 一、介绍 a) Debian系统的安装删除软件 i. Debian的安装软件包安装非常简单,配置好网络,不用自己找网站下载,找对应版本;只用一条命令,就下载安装都做好了 n810使用的maemo系统就是Debian的嵌入式版本,包安装方式同Debian相同 ii. deb安装包 deb是Debain的安装包,它的命名方式如下 软件包名称>_版本>-修订号>_平台>.deb 例如:nano_1.3.10-2_i386.deb b) 自动安装工具apt i. apt-get工具 /etc/apt/sources.list中放着下载软件的站点,用apt-get命令就可以找到相应软件版本,下载及安装升级软件包,及它依赖的包 $ apt-get install 包名 ii. apt-cache工具 apt软件包管理工具,通过它可查询软件包的状态信息 在你不知道包的具体名字的时候就可以用它查询 $ apt-cache search 包名的正则表达式 c) 手动安装工具dpkg dpkg是一个Debian的一个命令行工具,它可以用来安装、删除、构建和管理Debian的软件包,与apt工具不同的时,它需要你手动下载和安装,而不是一步到位 i. 将deb包下载到当前目录 $ aptitude download 包名 ii. 安装本地的包 $ dpkg -i 包名 iii. 制作安装包 $ dpkg -b 目录 [包名] 二、制作包 a) 把需要安装的程序及文件复制到临时目录 $ mkdir test $ mkdir test/DEBIAN $ mkdir test/usr/bin/ -p $ touch test/usr/bin/test_xy $ echo "echo hello" >test/usr/bin/test_xy $ chmod 777 test/usr/bin/test_xy b) 制做打包所需脚本 $ vi test/DEBIAN/control 编辑内容如下 Package: securing-debian-howto.zh-cn Priority: extra Section: doc Maintainer: tony etony@tom.com Architecture: all Version: 3.0 Description: Securing Debian Manual c) 打包 $ dpkg -b test haha.deb 三、安装包 a) 从当前目录直接安装 $ dpkg -i haha.deb $ /usr/bin/test_xy 此时就可以执行安装后的test_xy了 b) 在n810上安装 在n810上安装的包可以在scratchbox中编译后打包 就是用usb线插电脑上,把安装包拷到PDA的miniSD卡上,在PDA上点deb包安装 四、参考: a) deb包制作方法 http://debian.linuxsir.org/doc/inthedebianway/debian_build_package.html apt和dpkg命令使用说明 http://i18n.linux.net.cn/others/APT_and_Dpkg.php 21:38 | 添加评论 | 固定链接 | [url=javascript:BlogIt('cns!F8AECD2A067A6B17!1141');]写入日志[/url] | 嵌入式系统 9月21日 Nokia n810开发之二应用程序 一、简介及建立环境见上篇:Nokia n810开发之一搭建环境 二、做最简单的程序 1. 登录到scratchbox $ /scratchbox/ login 2. 程序 1) 建立程序目录结构 > mkdir hello > cd hello > touch hello.c Makefile hello.desktop 2) 编辑源码文件:hello.c #include #include int main(int argc, char** argv) { GtkWindow* window; GtkLabel* label; gtk_init(&argc, &argv); window = g_object_new(GTK_TYPE_WINDOW, "border-width", 12, "title", "Hello GTK+", NULL); label = g_object_new(GTK_TYPE_LABEL, "label", "Hello World!", NULL); gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(label)); gtk_widget_show_all(GTK_WIDGET(window)); g_print("main: calling gtk_main\n"); gtk_main(); g_print("main: returned from gtk_main and exiting with success\n"); return EXIT_SUCCESS; } 3) 编辑Makefile文件:Makefile hello: gcc hello.c -o hello `pkg-config --cflags gtk+2.0 --libs` install: cp hello /usr/bin/ cp hello.desktop /usr/share/applications/hildon/ 4) 编译桌面图标文件:hello.desktop [Desktop Entry] Encoding=UTF-8 Version=1.0 Type=Application Name=Hello Exec=/usr/bin/hello Icon=qgn_list_gene_default_app 图片文件一般情况如下: /usr/share/icons/hicolor/xxx/*.png 5) 在虚拟环境下编译安装 > make; make install 6) 在虚拟环境下运行 a) 在Ubuntu系统上启动Xpref $ Xephyr :2 -host-cursor -screen 800x480x16 -dpi 96 -ac -extension Composite b) 直接运行 > export DISPLAY=:2 > hello 此时可看到在Xpref的窗口中出现hello界面 c) 在n810平台上运行 > export DISPLAY=:2 > af-sb-init.sh start // 若已经启动,则先stop再start 点开菜单(左下图标)->Extras->Hello 7) 代码对应的开发机目录 假设我建立的用户是xieyan,那么建立的hello的源码目录对应开发机系统的 /scratchbox/users/xieyan/home/xieyan/hello 8) 注意 这个程序在命令行执行正常,但是如果在n810系统的菜单中调出,不一会儿就会自动被kill掉,原因是没有加osso库的调用 3. 安装 1) 做deb安装包,见《nokia n810开发指南3》 2) 就是用usb线插电脑上,把安装包拷到PDA的miniSD卡上,在PDA上点deb包安装 3) 如果直接运行程序,连通wifi后直接用scp复制也可以 三、参考 1. maemo应用程序详细例程: http://maemo.org/maemo_training_material/maemo4.x/html/maemo_Application_Development/ |