http://blog.csdn.net/junht/article/details/7656540

LTIB 中的包

4.3.1  查看哪些包是使能的,并且可以安装

在配置ltib之前,您可以在一个ltib配置文件上运行bin/listpkgs 。例如,对于mpc8548cds,您可以运行:

# bin/listpkgs config/platform/mpc8548cds/deconfig

这将列出所有可以选择的的包。那些在“Enable”列有一个‘y’将默认编译/安装。

如果您已经配置ltib,您可以得到更精确的(具体)清单通过运行:

# ./ltib -m listpkgs

只选择那些被使能,管道的软件包(y和单引号之间有个空格):

# ./ltib -m listpkgs | grep ' y '

4.3.2  查看包使用许可

使用[[#OptionListpkgs][-m listpkgs]] option

4.3.3  更改包的选择/配置并且立即编译

使用[[#OptionConfigure][--configure]] option

4.3.4  更改包的选择/配置但不编译

使用[[#OptionConfig][-m config]] option

4.3.5  如何编译/安装 不仅仅一个单一的包

# ./ltib -p <package_name>

注意1:当用’-p’指定一个软件包,它将被强制编译,即使它是最新的。

注意2:如果依赖包没有安装,那么编译/安装将失败。

4.3.6  如何更改软件包并且捕获它

默认情况下,rmp将在一个步骤里解压,配置,编译,安装和删除所有来源。这是一个经过充分考虑的特性来确保一个软件包被完全重编译。

显然,如果您正工作于一个包,这个方案是没有帮助的,为了促进这种开发过程,rpm提供short-circuited 编译/安装 的概念。

工作过程的例子

1、  解压源码并应用所有当前补丁

# ./ltib -m prep -p <package>

例如解压uboot 源码,可以使用 # ./ltib –m prep –p u-boot

2、  在“rpm/BUILD/package”下编辑/添加 文件。

3、  编译您改变的软件包。

# ./ltib -m scbuild -p <package>

4、  一旦软件包编译成功,检查安装状态。

# ./ltib -m scinstall -p <package>

5、  提交更改之前测试您的软件包

# ./ltib -m scdeploy -p <package>

6、  重复步骤2 ——> 5直到得到您满意的结果。

7、  生成一个补丁同时更新spec文件(dist/lsf/下)

# ./ltib -m patchmerge -p <package>

8、  手动清理补丁文件(根据需要)

9、  从头编译和安装

# ./ltib -p <package>

4.3.7  添加一个全新的包到根文件系统

怎样添加一个全新的包到我们的根文件系统呢,下面将进行介绍。

第一种是:有一个现有的想使用的srpm。

1、    导入srpm。这将把素材放在rpm子目录下。

# ./ltib –m addsrpms <path_of_the_sprm_to_import>

2、    按要求修改spec 文件(参看dist.lfs-5.1/template/template.spec 的例子)。

3、    确定软件包编译:

# ./ltib –m scbuild –p <new_package>

4、    按需修改rpm/BUILD/new_package目录下的源文件。

5、    生成并合并一个补丁来封装您的改变:

# ./ltib –m patchmerge –p <new_package>

6、    手动清除补丁文件(根据需要)

7、    重头编译和安装

# ./ltib –p <new_package>-x.y

8、    保存您的改变:

a). 将spec文件从临时区域移到一个永久区域并且检查git存储库,例如:

#mkdir dist/lfs-5.1/new_package

#mv rpm/SPECS/new_package.spec  dist/lfs-5.1/new_package/

#cd dist/lfs-5.1/new_package

#git add new_package.spec

#git commit -a -m "added new_package"

b). 拷贝源文件到您的LPP(Local Package Pool)

# rsync  -vptgo --ignore-existing  rpm/SOURCES/* /opt/freescale/pkgs/

c). 现在您需要上传您的源码/补丁 到PPP。

第二种: 没有现成的包,并且希望创建一个全新的包。可以按如下方法进行操作:

1、             首先清理您的源文件(删除所有的.o, .a, .so 后缀的生成文件)然后制作一个”tarball”,例如:

# cd <my_new_package>-x.y

# make clean

# cd ..

# tar zcvf <my_new_package>-x.y.tar.gz <my_new_package>-x.y

2、             移动这个tarball 到 LPP 以便 ‘ltib’能够找到它。

# mv <my_new_package>-x.y.tar.gz /opt/freescale/pkgs/

3、             使用现有的模板创建一个specfile

# mkdir dist/lfs-5.1/<my_new_package>

# cp dist/lfs-5.1/template/template.spec

dist/lfs-5.1/<my_new_package>/<my_new_package>.spec

4、             编辑固定模板来反映您的包,这个文件可能做如下改变(这部分的例子可以参看‘编译新的U-Boot’和‘编译新的Linux内核’等章节):

| *Field*   | *Description* |

| Summary | put in a summary of what the package is/does |

| Name    | put in the name of the packge (usually from the tarball name) |

| Version   | put in the version (usually from the tarball/directory |

| Release   | start at 1 and rev each time you change the spec file |

| License   | e.g GPL/LGPL/BSD, look this up in the package's files |

| Group    | If this exists on an rpm based machine, copy from rpm -qi <package> <br> If not, choose something from /usr/share/doc/rpm-<version>/GROUPS |

| %Build   | often you'll need to add *--host=#CFGHOST --build=%{_build}* to the configure clause |

5、             解压新软件包源码

# ./ltib -m prep -p <my_new_package>

6、             编译您改变的新的软件包

# ./ltib -m scbuild -p <my_new_package>

7、             一旦新软件包编译完成,检查安装状态

# ./ltib -m scinstall -p <my_new_package>

8、             在提交改变之前,如果您想测试您的软件包,可以执行下面的操作

# ./ltib -m scdeploy -p <my_new_package>

9、             一旦您满意新包,提交更新的spec文件。

# git add .

# git commit -a -m "added new_package"

10、         通过http://auslxsc01.mtwk.freescale.net/ltib/index.html. 上传新包包含的源码和补丁到PPP。

注意:

只有批准文件可以释放BSP,所以请遵循流程

1、如果你想与其他人分享,上传文件到PPP

2、检查脚本的运行,那么您将得到twiki之类的页面链接到你的文件

3、发送请求的电子邮件,其中包括twiki之类的页面链接进行审查

4.3.8  如何介绍新软件包来配置系统(略)

这一节再此处省略,您可以参见LtibFaq 文件 的1439行(或者搜索关键字How do I introduce my new package to the config system来查找)

4.4 LTIB 中的源码

软件包的源码在什么地方呢?

如果本地公共缓存区不可用,它们被下载和缓存到一个公共区域。如果您使用的是一个ISO镜像,它们将被预安装进本地公共缓存。

我们能从哪儿得到这些源码呢?主系统使用的是GPP/LPP/PPP。首先我们了解一下什么是LPP/GPP/PPP。

PPP(Private Package Pool),它可以有选择的使用一个存储区域用于私有源码和补丁来私有的访问http服务器。

GPP(Global Package Pool)是一个公共可用的http服务器,被用于为LTIB存储源码和补丁。

LPP(Local Package Pool)是一个本地公共缓存,被用于存储所有源码和补丁。

当ltib 需要编译rpms 时,包的spec文件被解析,解析后,编译器有一个源码和补丁的列表,这个列表在编译包的时候被用到。接着,编译器将顺序完成如下的工作:

1)检查file/symlink(不带任何path/URL前缀)是否存在rpm/SPURCES目录,如果存在,则使用。否则,进行第二步。

2)检查file/symlink(不带任何path/URL前缀)是否存在于LPP目录,如果这个文件存在,一个symlink 被创建到rpm/SOURCE目录,并且链接使用。如果没有,进行第三步。

3)编译器尝试从PPP下载文件(如果被 *%ppp_url* tag in *.ltibrc* to the LPP using *wget*指定)。如果下载成功,一个symlink被创建到rpm/SOURCE,并且链接使用。如果下载失败则进行第四步。

4)编译器尝试从GPP下载文件(由*%gpp_url* tag in *.ltibrc* to the LPP using *wget*指定)。如果下载成功,一个symlink被创建到rpm/SOURCE,并且链接使用。如果下载失败则进行第五步。

5)如果上述步骤都失败了,编译器将给出失败错误信息。

注意:您可以输入您的代理服务器信息到”.ltibrc”源文件,如果您工作于公司VPN环境并且希望在英特网上的外部GPP得到源码,必须这样做。

LTIB常用命令3的更多相关文章

  1. LTIB常用命令2

    LTIB 编译配置选项 根据说明文档,ltib 可以通过以下的命令配置: * <verbatim># ./ltib</verbatim>          安装后第一次运行,采 ...

  2. LTIB常用命令1

    下面再写一点ltib的常用命令参数吧,虽然觉得对其编译内核和文件系统流程有了一定了解,但是对其命令参数用过的还不是很多,可以说是不甚了解,下面介绍一些,希望有用: 首先一个比较有用的命令参数就是hel ...

  3. Linux 常用命令(持续补充)

    常用命令: command &:将进程放在后台执行 ctrl + z:暂停当前进程 并放入后台 jobs:查看当前后台任务 bg( %id):将任务转为后台执行 fg( %id):将任务调回前 ...

  4. LVM基本介绍与常用命令

    一.LVM介绍LVM是 Logical Volume Manager(逻辑卷管理)的简写,它是Linux环境下对磁盘分区进行管理的一种机制LVM - 优点:LVM通常用于装备大量磁盘的系统,但它同样适 ...

  5. Linux学习笔记(一):常用命令

    经过统计Linux中能够识别的命令超过3000种,当然常用的命令就远远没有这么多了,按照我的习惯,我把已经学过的Linux常用命令做了以下几个方面的分割: 1.文件处理命令 2.文件搜索命令 3.帮助 ...

  6. git常用命令(持续更新中)

    git常用命令(持续更新中) 本地仓库操作git int                                 初始化本地仓库git add .                       ...

  7. 【原】npm 常用命令详解

    今年上半年在学习gulp的使用,对npm的掌握是必不可少的,经常到npm官网查询文档让我感到不爽,还不如整理了一些常用的命令到自己博客上,于是根据自己的理解简单翻译过来,终于有点输出,想学习npm这块 ...

  8. npm常用命令

    npm常用命令 环境:win7 npm 是什么 NPM(node package manager),通常称为node包管理器.顾名思义,它的主要功能就是管理node包,包括:安装.卸载.更新.查看.搜 ...

  9. Git 常用命令

    一.初始環境配置 git config --global user.name "John Doe"git config --global user.email johndoe@ex ...

随机推荐

  1. JAVA基础知识之Collections工具类

    排序操作 Collections提供以下方法对List进行排序操作 void reverse(List list):反转 void shuffle(List list),随机排序 void sort( ...

  2. 数据库查询优化器的艺术:原理解析与SQL性能优化

    数据库查询优化器的艺术 作者:李海翔 Oracle公司MySQL全球开发团队.资深专家 简单的浏览了一遍,由于以前没有接触过SQL优化这些知识,读起来还是非常吃力的,不过收获还是很大的. 作者通过对M ...

  3. gulp 建立一个简单的自动化

    前端项目需要的功能: 1.图片(压缩图片支持jpg.png.gif) 2.样式 (支持sass 同时支持合并.压缩.重命名) 3.javascript (检查.合并.压缩.重命名) 4.html (压 ...

  4. flask安装

    Flask简介 Flask算是小型框架,自开发伊始就被设计为可扩展的框架,它具有一个包含基本服务的强健核心.Flask有两个依赖:路由.调试.和web服务器网关接口(Web Server Gatewa ...

  5. 2016年12月9日 星期五 --出埃及记 Exodus 21:4

    2016年12月9日 星期五 --出埃及记 Exodus 21:4 If his master gives him a wife and she bears him sons or daughters ...

  6. HDU 5615 Jam's math problem

    Jam's math problem Problem Description Jam has a math problem. He just learned factorization.He is t ...

  7. xtrabackup 安装、备份、还原及错误处理 教程

    xtrabackup 是MYSQL的一个备份软件 Xtrabackup是一个对InnoDB做数据备份的工具,支持在线热备份(备份时不影响数据读写),是商业备份工具InnoDB Hotbackup的一个 ...

  8. Linux企业运维高效技巧心得及分享

    本博文出自51CTO博主 吴光科 的博客,有任何问题请进入博主页面互动讨论! 博文地址:http://wgkgood.blog.51cto.com/1192594/1641247 随着Linux在企业 ...

  9. eclipse 恢复SVN无法还原的文件 svn使用了还原,但本地的没有提交找回没提交代码的方法

    http://blog.sina.com.cn/s/blog_750167060102vd2n.html

  10. js写个日历

    其实我是一个对时间和日期不怎么感兴趣的人,小学的时候感觉时间或者日期那块就让我很晕,因为有时候是100进制有时候是60进制,搞的我对日历一直很不感兴趣,最近不知道为什么想写一个日历了,可想而知,这个玩 ...