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得到源码,必须这样做。