u-boot manual 翻译第三章下

    xiaoxiao2023-09-30  160

    3.7通过NFS使用ELDK

    以NFS作为根文件系统的目标机,可以通过NFS使用ELDK。例如,8xx系列的机器,假设ELDK安装在/opt/eldk,可以使用下面的目录作为NFS的根目录

    /opt/eldk/ppc_8xx

    在NFS作为文件系统的目录能够工作之前,必须在<ELDK_root>/<target_cpu_variantt>/dev 目录下创建必要的设备节点。这一步需要超级权限因而不能在安装过程中做(通常是用普通用户安装ELDK的)。为了方便创建节点,ELDK提供了名为ELDK_MAKEDEV的脚本。脚本位于发行版的ELDK ISO镜像的根目录下。脚本有下面的参数可供选择。

    -d<dir> 指定ELDK安装的目录。默认情况下,当前目录是ELDK的安装目录。

    -a<cpu_family>指定目标CPU系列的目录,默认情况下,所有安装的目标架构目录都适用于创建的这些设备节点。

    -h 输出用法。

    # /mnt/cdrom/ELDK_MAKEDEV -d /opt/eldk

    注意:相对于老版本的ELDK,这条命令的结果以及选项的作用已经有了很大的变化,请参考相应的手册。

    ELDK中的一些工具(target utilites)设置了SUID,例如mount和su。这意味着,当这些工具运行的时候,它们拥有与它们的拥有者一样的权限。就是说,通常情况下,这些工具拥有安装ELDK到系统的用户一样的权限。不过,为了让这些工具正常工作,它们必须要有超级运行权限。这就是说,如果ELDK不是超级用户安装的,而ELKD的拥有者设置了SUID,在ELDK作为根文件系统被挂载之前,必须要切换到root用户。发行版的ELDK镜像文件中包含了一个名为ELDK_FIXOWNER的脚本,它用于将用到的ELDK的文件的所有者切换为root。这个脚本拥有跟上边ELDK_MAKEDEV一样的参数。注意,你必须有超级权限来运行它。例如,你安装ELDK在/opt/eldk目录下,你可用使用下面的命令:

    #cd /opt/eldk

    #mnt/cdrom/ELDK_FIXOWNER

    注意,如果你安装ELDK的目录在之前已经安装过ELDK,执行ELDK_FIXOWNER并且不带参数的话,这个脚本会作用于所有的ELDK架构版本目录。这回花费一定的时间。为了节省时间,请使用-a来指定架构。例如:

    #cd /opt/eldk

    #/mnt/cdrom/ELDK_FIXOWNER -a ppc_8xx

    3.8 重新编译ELDK

    3.8.1ELDK源码发布

    ELDK的所有内容都有源码发布。因此,可以重新编译ELDK的任意包。这些源码包都是SRPM形式的,用ISO镜像独立发布。

    当重新编译需要的包或者ELDT包时,你必须事先从ISO镜像中安装了需要的RPM包到ELDK安装环境中。你可以使用下面的命令:

    $ ${CROSS_COMPILE}rpm -i /mnt/cdrom/SRPMS/<source_rpm_file_name>.src.rpm

    使用上面的命令安装ELDK的PRM以后,能够在<ELDK_root>/usr/src/denx子目录下找到ELDK的源码和spec文件。

    下面的小节会详细说明重新编译ELDT和需要的包时用到的指令。

    3.8.2从新编译需要的包(target package)

    所有需要编译的包都能通过源码包进行重新编译。首先,你必须已经安装了Source RPM:

    bash$ ${CROSS_COMPILE}rpm -ivh <package_name>.src.rpm

    然后在ELDK环境中,你可以使用下面的命令重新编译使用到的RPM:

    bash$ ${CROSS_COMPILE}rpmbuild -ba <package_name>.spec

    为了正确进行重新编译,以下条件必须成立

           $CROSS_COMPILE 需要与CPU对应。

           在PATH中<ELDK_root>/usr/ppc-linux/bin必须放在/usr/bin之前。这是确定命令gcc使用的是ELDK的交叉编译器,而不是主机的gcc。

    新编译的包能够很容易被安装:

    bash$ ${CROSS_COMPILE}rpm -i <package_name>.rpm

    3.8.3重新编译ELDT包

    在ELDK环境下,所有的ELDT包都支持从source RPM包中进行重新编译:

    $ unset CROSS_COMPILE

    $<ELDK_root>/usr/bin/rpmbuild -ba <package_name.spec>

    为了正确进行编译 ,以下条件必须成立

           环境变量$CROSS_COMPILE必须不被设置

           不要使用命令前缀$CROSS_COMPILE

           PATH 中必须没有<ELDK_root>/usr/ppc-linux/bin 目录。这是为了使命令gcc使用的是主机的gcc而不是ELDK的交叉编译器。

    注意新编译的包应该使用全局的rpm进行安装,而不是架构相关的:

    bash$ <ELDK_root>/root/rpm -i <package_name>.rpm

    3.9 ELDK包

    3.9.1ELDT包列表

    见官方手册

    3.9.2 目标包列表

    见官方手册

    3.10从零开始重新编译ELDK

    在这一部分,你能找到如何使用互联网上的源码包,补丁,spec文件和ELDK的CD-RO中提供的编译脚本从零开始创建ELDK的命令。

    3.10.1ELDK 创建过程概览

    ELDK采用Fedora 7 Linux发行版作为源码参考。所有由ELDK作出的对于Fedoarl版本源码的更改都是补丁的方式存在,这些补丁都是在编译的时候用RPM工具生成的。同时,对于ELDK的RPM包,ELDK使用的是更改过的spec文件。因此,大部分ELDK的源码包都由以下这些部分组成:

          原始的Fedora源码包

          ELDK源码包

          ELDK补丁

          ELDK spec 文件

    原始的Fedoral源码包可以由下面的链接得到。

    http://download.fedora.redhat.com/pub/fedora/linux/core.

    ELDK补丁和spec文件都可以在DENX GIT仓库中从ELDK源码CD-ROM中得到。同时,为了方便,原始的Fedoral源码也能从这里得到。

    使用下面的命令得到其中的一个模块

    git-clone git://www.denx.de/git/eldk/module

    以下的模块可供使用

    Module Name

    Contents

    tarballs

    Source tarballs

    build

    Build tools, patches, and spec files

    SRPMS

    Fedora 7 sources

    接着,你可以使用“git-checkout”命令切换到ELDK的一个发行版。例如,从ELDK release 4.1下载文件,请在模块目录中执行下面的命令

    git-checkout ELDK_4_2

    必须注意,一些包含在ELDK中的文件并不会包含zaiFedoral中。比如 appWeb,microwindows和wu-ftpd.因为这些tar包都是在DENX GIT仓库中。

    为了方便编译而开发出了一个编译工具(a build infrastructure)。这个编译工具包含下面的部分。

            ELDK_BUID 脚本

            build.sh脚本

           cpkgs.lst文件

           tpkgs.lst文件

          SRPMS.lst文件

          tarballs.lst文件

    ELDK_BUILD是编译ELDK的主要脚本,它是你从零开始编译ELDK时经常使用的工具。以简单起见,ELDK不使用参数,它会自动编译生成ELDK。你可以传递以下的参数到ELDK_BUILD.

    -a <arch> 目标架构:“arm”, “ppc”或者“ppc64”,默认是“ppc”。

    -n<build_name> 编译生成文件名。默认情况下名字取决于编译的架构和编译时的时间,并有这样的格式:<arch>-YYY-MM-DD

    -v<version> ELDK版本

    -u 创建基于uClibc版本的ELDK(基于能使用uClibc的平台和版本)

    -p<builddir>编译目录。默认情况下,编译生成的工作目录和结果将会放在当前目录。

    警告:编译ELDK时使用的脚本依赖于RPM的标准设置。确保在你个人的~/.rpmmacros 文件使用标准的设置以避免冲突。

    build.sh 会读取cpkgs.lst和tpkgs.lst文件,因此cpkgs.lst和tpkg.lst中必须包含对eldt和trg接下来的执行步骤的描述。cpkgs.lst 和tpkg.lst中包含ELDT和目标包列表,列表中的内容将会包含在ELDK中。SRPMS.lst文件中包含FedoraldeRPM源码包列表,列表中的源码包将用于ELDK的编译。tarballs.lst文件中包含tar包和源码包列表,列表中的文件包含在ELDK中但是并不包含在Fedoral 7 中。

    为了使ELDK_BUILD正常工作,脚本必须工作在主机系统中特定的编译环境下。编译环境能够得从DENX GIT仓库中(参考3.10.2小节设置ELDK编译环境)或者CD-ROM中得到。

    下面的图表给出了为ELDK_BUILD创建编译环境的更加详细的概要。

    <some_directory>/ build/cross_rpms/<package_name>/SPECS/... SOURCES/... target_rpms/<package_name>/SPECS/... install/install.c Makefile misc/ELDK_MAKEDEV ELDK_FIXOWNER README.html cpkgs.lst tpkgs.lst build.sh ELDK_BUILD SRPMS.lst tarballs.lst tarballs/.... SRPMS/.... SRPMS-updates/....

    ELDT的源码和目标包的RPM spec 文件分别存储在cross_rpms和target_rpms的子目录中。install子目录中包含安装程序源码,安装程序将会被编译并安装在ISO镜像文件的根文件中。tarballs文件中包含软件包的tarballs。这些软件包包含在ELDK中但是不包含在Fedoral7中。

    SRPMS和SRPMS-updates文件中包含Fedoral7的RPM源码包。ELKD_BUILD脚本在SRPMS目录中查询软件包,如果没有找到,就在SRPMS-updates目录中查找。如果在编译的过程中缺少一些或者所有的Fedora的 SRPMs,ELDK_BUILD脚本将会从互联网上下载RPMS源码包。

    CD-ROM中提供即用的ELDK编译环境。对于创建编译环境的更详尽的指令请参考下面3.10.2小节.创建ELDK编译环境。

    ELDK_BUILD检验环境变量ELDK_PREFIX的值来确定ELDK编译环境的根目录。当运行ELDK_BUILD的时候,ELDK_PREFIX的值没有设置,默认/opt/eldk为ELDK编译环境的根目录。在上述例子目录结构中编译ELDK,必须在运行ELDK_BUILD之前设置ELDK_PREFIX。

    所有的创建步骤完成之后,在ELDK的编译环境中,下面的子目录会被创建:

    build/<build_name>/work/ - full ELDK environment build/<build_name>/logs/ - build procedure log files build/<build_name>/results/b_cdrom/ - binary cdrom tree, ready for mkisofs results/s_cdrom/ - source cdrom tree, ready for mkisofs results/d_cdrom/ - debuginfo cdrom tree, ready for mkisofs

    在Linux主机上,ELDK_BUILD会自动创建二进制和原ISO镜像,并放在results目录中。在Solaris主机上,ISO镜像文件是手动创建的。使用文件夹b_cdrom和s_cdrom中的内容来创建ISO镜像。

    3.10.2创建ELDK编译环境

    为了方便,CD-ROM中提供了完整的ELDK编译环境。你需要拷贝CD-ROM中的内容到主机上的空目录。假设包含ELDK编译环境的CD-ROM挂载在/mnt/cdrom目录下,创建编译环境的空目录是/opt/eldk,使用下面的命令来创建编译环境:

    bash$ cd /opt/eldk

    bash$ cp -r /mnt/cdrom/* .

    上述命令会创建3.10.1小节ELDK创建过程概要所描述的结构。所有需要的脚本和ELDK相关的原文件会被放在build子目录下。需要的tarball将会放在tarballs目录下。在SRPMS子目录中有编译ELDK所用到的Fedora 7 SRPMS。

    或者,可以从DENX GIT仓库中获取ELDK编译环境。build和tarballs两个模块提供下载,build模块包含编译环境中build子目录中的内容。tarballs模块包含软件源码tarball,这些软件包包含子ELDK中但是不包含在Fedora 7中。使用下面的名利从DENX GIT仓库中创建ELDK编译环境(下面的例子假设编译环境的根目录是/opt/eldk):

    bash$ cd /opt/eldk

    bash$ git-clone git://www.denx.de/git/eldk/build

    bash$ git-clone git://www.denx.de/git/eldk/tarballs

    bash$ git-clone git://www.denx.de/git/eldk/SRPMS

    注意:为了能够在更多的Linux发行版上(包括老系统)安装ELDK,使用Red Hat 7.3系统来编译。同时,Fedor Core 5 是以知的能够作为编译环境。其他的发行版本,尤其是最近的发行版系统,很有可能都有问题。因此,我们提供了基于Red Hat 7.3的根文件系统镜像,这个镜像能够运行在一些虚拟环境下(例如qemu等等)。下面的链接包含应用注意事项以及详细的命令:

    http://www.denx.de/wiki/DULG/AN2009_02_EldkReleaseBuildEnvironment

    3.10.3 build.sh使用方法

    如果你不想从头开始编译ELDK,例如,你只想从新编译或者只想更新特定的软件安装包,有时,不借助ELDK_BUILD脚本,而手动使用build.sh会很方便。注意,通常不推荐这种做法。

    整个编译过程分为六步,build.sh脚本应该被指定在哪一步之行。编译步骤如下:

     

     

     

     

    最新回复(0)