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. Network 分类: POJ 图论 2015-07-27 17:18 17人阅读 评论(0) 收藏

    Network Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 14721 Accepted: 5777 Special Judg ...

  2. mediastream2使用指南(转载)

    http://blog.sina.com.cn/s/blog_59d649610100diui.html 定义 Filter: 媒体库中处理数据的组件.一个filter有0到数个输入流和0到数个输出流 ...

  3. Python学习笔记-Day1-Python基础

    1.python诞生 关于Python的起源,吉多·范罗苏姆在1996年写到: 六 年前,在1989年12月,我在寻找一门“课余”编程项目来打发圣诞节前后的时间.我的办公室会关门,但我有一台家用电脑, ...

  4. python爬虫之Scrapy 使用代理配置

    转载自:http://www.python_tab.com/html/2014/pythonweb_0326/724.html 在爬取网站内容的时候,最常遇到的问题是:网站对IP有限制,会有防抓取功能 ...

  5. CSU 1325: A very hard problem 中南月赛的一道题。

    1325: A very hard problem Time Limit: 3 Sec  Memory Limit: 160 MBSubmit: 203  Solved: 53[Submit][Sta ...

  6. reactjs入门到实战(一)---- hello world例子

    React 起源于 Facebook 的内部项目,因为该公司对市场上所有 JavaScript MVC 框架,都不满意,就决定自己写一套,用来架设 Instagram 的网站.做出来以后,发现这套东西 ...

  7. AIM Tech Round 3 (Div. 2) B

    Description Vasya takes part in the orienteering competition. There are n checkpoints located along ...

  8. WebForm 发送邮箱

    首先在设置发件邮箱的SMTP服务,以新浪邮箱为例:设置区----客户端pop/imap/smtp----"POP3/SMTP服务"和"IMAP4服务/SMTP服务&quo ...

  9. iosanimationWithKeyPath

    animationWithKeyPath的值: transform.scale = 比例轉換     transform.scale.x = 闊的比例轉換     transform.scale.y ...

  10. Duilib中系统消息在自己窗口类的使用

    这些Win32消息响应函数,子类只需要重写,不需要在HandleMessage里面再调用一次 开发中遇到的问题,在任务栏关闭程序,会响应WM_SYSCOMMAND消息,因为要给用户提示是否关闭,所以需 ...