




已阅读5页,还剩100页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
CLFS,CLFS分三种版本: CLFS1.0 CLFS2.0(现改名为CLFS-SYSROOT) CLFS3.0(现改名为CLFS- EMBEDDED) 改名是为了不给人一种高版本号代表更先进版本的错觉。,三个版本采取不同的编译安装策略,CLFS-1.0版是在主机上为目标系统建立一个基础环境,即目标版体系的GLIBC、GCC、BINUTILS和其他一些辅助工具,然后在目标板启动,然后在目标板上进行系统从GLIBC到所有软件包的安装和编译工作,这样操作能得到绝对独立纯净的目标系统,三个版本采取不同的编译安装策略,SYSROOT版采取的是完全交叉编译安装的策略,所有软件包都在主机上交叉编译安装 EMBEDDED主要是使用BUZYBOX和UCLIBC针对uclinux,本机环境要求:,Bash Binutils Bzip2 Coreutils Diffutils Findutils Gawk Gcc Glibc Grep Gzip Make Patch Sed Tar,建立安装环境,磁盘分区: 输入命令: cfdisk 保存退出后进行磁盘分区的格式化 mkswap /dev/hda7 mkfs.ext3 /dev/hda6 磁盘格式化一定要在磁盘分区未进行加载前进行,建立安装环境,激活交换分区 swapon /dev/hda7 创建CLFS的“创作基地” export CLFS=/mnt/clfs mkdir -pv $CLFS 加载CLFS文件系统存放的分区 mount /dev/hda6 $CLFS,准备工作,建立用户 groupadd clfs useradd -s /bin/bash -g clfs -m -k /dev/null clfs passwd clfs 创建工作目录 mkdir -pv /mnt/clfs/build,download chown -Rv clfs $CLFS 切换用户 su - clfs,设置环境变量,cat /.bash_profile “EOF“ exec env -i HOME=$HOME TERM=$TERM PS1=u:w$ /bin/bash EOF 任何用户登录时SHELL都会读取主机系统的/etc/profile脚本加载里面的各种环境变量,然后读取用户目录下的.bash_profile,在这里的.bash_profile中加入exec env -i./bin/bash命令,从新启动一个BASH替代先前登录的那个,它使用除TERM、HOME、PS1外完全空白的环境变量。,设置环境变量,cat /.bashrc “EOF“ set +h umask 022 CLFS=/mnt/clfs LC_ALL=POSIX PATH=$CLFS/cross-tools/bin:/bin:/usr/bin export CLFS LC_ALL PATH EOF 这里set +h命令关闭bash的hash功能,让它从新到PATH路径中搜索程序。,设置环境变量,编译交叉编译工具时要保持CLFAGS、CXXFLAGS无设置 unset CFLAGS unset CXXFLAGS echo unset CFLAGS /.bashrc echo unset CXXFLAGS /.bashrc 在建立交叉编译工具和将来进行交叉编译时需要一些特定的变量 export CLFS_HOST=“$(echo $MACHTYPE | sed “s/$(echo $MACHTYPE | cut -d- -f2)/cross/“)“ export CLFS_TARGET=“mipsel-linux-gnu“ echo export CLFS_HOST=“$CLFS_HOST“ /.bashrc echo export CLFS_TARGET=“$CLFS_TARGET“ /.bashrc 到这里建立交叉编译工具链的环境已经搭建完毕,可以开始制作交叉编译工具链。 然后加载.bash_profile。 source /.bash_profile,建立目标系统目录结构,建立目标系统目录结构 pushd $CLFS mkdir -pv bin,boot,dev,etc/,opt,home,lib,mnt mkdir -pv proc,media/floppy,cdrom,sbin,srv,sys mkdir -pv var/lock,log,mail,run,spool mkdir -pv var/opt,cache,lib/misc,locate,local install -dv -m 0750 root install -dv -m 1777 var/,tmp mkdir -pv usr/,local/bin,include,lib,sbin,src mkdir -pv usr/,local/share/doc,info,locale,man mkdir -pv usr/,local/share/misc,terminfo,zoneinfo mkdir -pv usr/,local/share/man/man18 for dir in usr,/local; do ln -sv share/man,doc,info $dir done cd boot ln -svf . boot mkdir -v $CLFS/cross-tools popd,创建必要的用户、组和日志文件,cat $CLFS/etc/passwd $CLFS/etc/group “EOF“ root:x:0: bin:x:1: sys:x:2: kmem:x:3: tty:x:4: tape:x:5: daemon:x:6: floppy:x:7: disk:x:8: lp:x:9: dialout:x:10: audio:x:11: video:x:12: utmp:x:13: usb:x:14: cdrom:x:15: EOF,创建日志文件,login agetty init程序会用到一些日志文件,这里先创建出来 touch $CLFS/var/run/utmp $CLFS/var/log/btmp,lastlog,wtmp chmod -v 664 $CLFS/var/run/utmp $CLFS/var/log/lastlog 到这里建立交叉编译工具链的环境已经搭建完毕,可以开始制作交叉编译工具链,下面来讨论SYSROOT版原理,交叉编译工具链 这个过程是SYSROOT版原理实现的关键,而这里三次用到-with-sysroot这个参数则是这个过程的关键,后面将详细讨论。,工具链的制作过程,内核头文件的设置 二进制工具程序的设置 引导编译器的设置 C链接库 的设置 完整编译器的设置,链接库 的设置,链接库的建立期间会建立三组链接库: 共享链接库 静态链接库 具有统计信息的静态链接库 以上这三组由/lib/ld.so.1(动态链接器)加载、 由/etc/ld.so.conf告诉在那里找。 ld -verbose | grep SEARCH 可查看链接器的搜索路径,1.内核头文件,tar xvf $DOWNLOADDIR/linux-2.6.22.6.tar.bz2 -C $BUILDDIR pushd $BUILDDIR/linux-2.6.22.6/ make include/linux/version.h /创建 include/linux/version.h 文件 install -dv $CLFS/usr/include/asm,asm-generic,linux,net,mtd,scsi,sound cp -av include/asm-generic/* $CLFS/usr/include/asm-generic cp -av include/linux/* $CLFS/usr/include/linux cp -av include/mtd/* $CLFS/usr/include/mtd cp -av include/net/* $CLFS/usr/include/net cp -av include/scsi/* $CLFS/usr/include/scsi cp -av include/sound/* $CLFS/usr/include/sound cp -av include/asm-generic,linux,mtd,scsi,sound $CLFS/usr/include cp -av include/asm-mips/* $CLFS/usr/include/asm cd rm -r linux-2.6.22.6 popd,2. Binutils交叉工具,tar xvf $DOWNLOADDIR/e/binutils-2.17.tar.bz2 -C $BUILDDIR pushd $BUILDDIR/binutils-2.17/ patch -Np1 -i $DOWNLOADDIR/e/binutils-2.17-posix-1.patch mkdir -v /binutils-build cd /binutils-build /binutils-2.17/configure -prefix=$TARGET_DIR/cross-tools -host=$CLFS_HOST -target=$CLFS_TARGET -with-sysroot=$TARGET_DIR -disable-nls -enable-shared -disable-multilib 从参数上的理解是,binutls将被安装到$CLFS/cross-tools中(-prefix=$CLFS/cross- tools),编译出来的二进制文件将运行在$CLFS_HOST所指定的平台上(-host=$CLFS_HOST),而其连接出的可执行文件是运行在$CLFS_TARGET所指定的平台上(-target=$CLFS_TARGET),屏蔽国际化支持(-disable- nls),同时编译出共享链接库(-enable-shared),不支持多种架构库(-disable-multilib),同时将$CLFS 所定义的目录作为根目录(-with-sysroot第一次出现这个)。接着的make configure-host不要少了,这样可以利用前面设置的参数全面配置binutils所有需要编译的部分。这个BINUTILS是交叉版本,它由HOST机的GCC和BINUTILS编译联接而成,它是在HOST机上运行联接生成目标系统程序 make configure-host /利用前面设置的参数全面配置binutils所有需要编译的部分 make make install cp -v /binutils-2.17/include/libiberty.h $CLFS/usr/include cd rm -rf binutils-build/ binutils-2.17/ popd,3.目标系统glibc头文件(1),tar xvf $DOWNLOADDIR/glibc-2.6.1.tar.bz2 -C $BUILDDIR pushd $BUILDDIR/glibc-2.6.1/ cp configure,.orig & sed -e s/3.4/3.0-9/g configure.orig configure tar xvf $DOWNLOADDIR/glibc-ports-2.6.1.tar.bz2 mv -v glibc-ports-2.6.1/ ports /glibc能够支持mips而安装的,标准的glibc并不支持mips等几个体系,而glibc-ports就是为了补充这部分的支持而出现的(这里必须将其改为ports,否则编译无法找到)。 echo “ ports/sysdeps/mips/mips32/Makefile /清空ports/sysdeps/mips/mips32/Makefile,mipsel-linux-gcc无法识别该Makefile中传参变量abi。 sed -i s/wordsize.h$/wordsize.hn#define _WORDSIZE 32/g bits/types.h mkdir -v /glibc-build cd /glibc-build,3.目标系统glibc头文件(2),echo “libc_cv_forced_unwind=yes“ config.cache echo “libc_cv_c_cleanup=yes“ config.cache echo “libc_cv_mips_tls=yes“ config.cache echo “install_root=$CLFS“ configparms CC=gcc /glibc-2.6.1/configure -prefix=/usr -host=$CLFS_TARGET -build=$CLFS_HOST -with-headers=$CLFS/usr/include -cache-file=config.cache 这个编译参数说明gcc用的是主系统的gcc,这里需要注意的是-prefix=/usr虽然指定的是/usr目录,但实际上最后安装到的是$ install_root/usr下,如果没有指定install_root,那自然是安装到了/usr,而因为前面指定了install_root 的目录,实际上最后安装到了$CLFS/usr下。 -with-headers指定了使用的头文件的目录,glibc唯一必须要的头文件就是内核的头文件,因为glibc也是可以支持多种内核平台的,比如BSD,所以它也必须了解所服务的内核的所有特征细节,因此就不难理解为什么内核头文件必须先于glibc的头文件安装,只有这样 glibc才能“了解”到准确的内核信息。,3.目标系统glibc头文件(3),make install-headers install -dv $CLFS/usr/include/bits cp -v bits/stdio_lim.h $CLFS/usr/include/bits touch $TARGET_DIR/usr/include/bits/stdio_lim.h touch $CLFS/usr/include/gnu/stubs.h cp -v /glibc-2.6.1/ports/sysdeps/unix/sysv/linux/mips/nptl/bits/pthreadtypes.h $CLFS/usr/include/bits cd rm -rf glibc-2.6.1/ glibc-build/ popd,4.gcc-4.2.1第一遍(1),tar xvf $DOWNLOADDIR/gcc-4.2.1.tar.bz2 -C $BUILDDIR pushd $BUILDDIR/gcc-4.2.1/ patch -Np1 -i $DOWNLOADDIR/gcc-4.2.1-posix-1.patch patch -Np1 -i $DOWNLOADDIR/gcc-4.2.1-cross_search_paths-1.patch mkdir -v /gcc-build cd /gcc-build /gcc-4.2.1/configure -prefix=$CLFS/cross-tools -host=$CLFS_HOST -target=$CLFS_TARGET -disable-multilib -with-sysroot=$CLFS -disable-nls -disable-shared -enable-languages=c 从参数上理解就是,gcc将被安装到$CLFS/cross-tools,而且只编译c语言部分,同时将$CLFS所定义的目录作为根目录(-with-sysroot)。如果要生成支持C+的交叉版的GCC需要目标版的Glibc库,而现在我们还没有目标版的Glibc库,还好编译Glibc只需要支持C的交叉版GCC,而支持C的交叉版GCC只需要Glibc头文件就可以编译出来。这样看来第一次编译的GCC的使命就十分明显了:他就是用来编译接下来的Glibc库。这里第二次用到-with-sysroot这个参数。,4.gcc-4.2.1第一遍(2),make all-gcc make install-gcc cd rm -rf gcc-build/ gcc-4.2.1/ popd,5.目标系统的glibc (1),tar xvf $DOWNLOADDIR/glibc-2.6.1.tar.bz2 -C $BUILDDIR pushd $BUILDDIR/glibc-2.6.1/ tar xvf $DOWNLOADDIR/glibc-ports-2.6.1.tar.bz2 mv -v glibc-ports-2.6.1/ ports patch -Np1 -i $DOWNLOADDIR/glibc-2.6.1-libgcc_eh-1.patch patch -Np1 -i $DOWNLOADDIR/glibc-2.6.1-localedef_segfault-1.patch patch -Np1 -i $DOWNLOADDIR/glibc-2.6.1-cross_hacks-1.patch patch -Np1 -i $DOWNLOADDIR/glibc-2.6.1-RTLD_SINGLE_THREAD_P-1.patch ln -s nptl/sysdeps/unix/sysv/linux/i386 ports/sysdeps/unix/ mkdir -v /glibc-build cd /glibc-build echo “libc_cv_forced_unwind=yes“ config.cache echo “libc_cv_c_cleanup=yes“ config.cache echo “install_root=$CLFS“ configparms,5.目标系统的glibc (2),BUILD_CC=“gcc“ CC=“$CLFS_TARGET-gcc“ AR=“$CLFS_TARGET-ar“ RANLIB=“$CLFS_TARGET-ranlib“ /glibc-2.6.1/configure -prefix=/usr -libexecdir=/usr/lib/glibc -host=$CLFS_TARGET -build=$CLFS_HOST -disable-profile -enable-add-ons -with-tls -enable-kernel=2.6.0 -with-_thread -with-binutils=$CLFS/cross-tools/bin -with-headers=$CLFS/usr/include -cache-file=config.cache BUILD_CC使用的是主机的GCC而不是刚才编译生成的交叉版GCC,这是运行于I386上生成的二进制执行文件也是运行于I386上的,这是来编译一些临时文件用的。CC指定的是刚编译出来的交叉版的GCC,这里我们编译生成的Glibc是目标版上运行的所以要用到交叉版的GCC。AR和RANLIB是binutils中的工具,它们也是在编译过程中需要用到的,而且是用来处理目标平台的二进制文件,所以它们也是使用交叉编译用的版本。-prefix=/usr -libexecdir=/usr/lib/glibc前面已经提过是在$CLFS目录下的/usr和/usr/lib/glibc。-host指定了生成的Glibc是运行于目标体系的,这与刚才编译的Binutils和GCC不同,Binutils和GCC是交叉版,他们运行于主系统(i386)生成的2进制文件运行于目标平台。-with-binutils=$CLFS/cross-tools/bin则是表明使用的binutils是用的交叉版的。,5.目标系统的glibc (3),make make instal 上面的命令没有安装 locale(用另一种语言反馈信息),所以用下面的命令来安装它们 make localedata/install-locales cd rm -rf glibc-2.6.1/ glibc-build/ popd,6.Configuring Glibc,cat $CLFS/etc/nsswitch.conf “EOF“ # Begin /etc/nsswitch.conf passwd: files group: files shadow: files hosts: files dns networks: files protocols: files services: files ethers: files rpc: files # End /etc/nsswitch.conf EOF 我们需要建立 /etc/nsswitch.conf 文件。因为在这个文件丢失或不正确的情况下,Glibc 会使用默认配置,而 Glibc 的默认配置无法很好地在网络环境下工作。并且我们也需要设置自己的时区。 TZDIR=“$CLFS/usr/share/zoneinfo“ $CLFS/usr/bin/tzselect cp -v -remove-destination $CLFS/usr/share/zoneinfo/Asia/Shanghai $CLFS/etc/localtime,配置动态链接库加载程序,cat $CLFS/etc/ld.so.conf “EOF“ # Begin /etc/ld.so.conf /usr/local/lib /opt/lib # End /etc/ld.so.conf EOF 默认情况下,动态链接库加载程序(/lib/ld-linux.so.2)搜索 /lib 和 /usr/lib 目录来寻找程序需要使用的动态连接库。但是,如果某些库在这两个目录之外,你就需要把它们的路径加到 /etc/ld.so.conf 文件里,以便动态链接库加载程序能够找到它们。 /usr/local/lib 和 /opt/lib 是两个经常包含动态连接库但又不在默认目录中的目录,我们要把它们添加到动态链接库加载程序的搜索路径中,7.gcc-4.1.1第二遍,tar xvf $DOWNLOADDIR/gcc-4.2.1.tar.bz2 -C $BUILDDIR pushd $BUILDDIR/gcc-4.2.1/ patch -Np1 -i $DOWNLOADDIR/gcc-4.2.1-posix-1.patch patch -Np1 -i $DOWNLOADDIR/gcc-4.2.1-cross_search_paths-1.patch mkdir -v /gcc-build cd /gcc-build /gcc-4.2.1/configure -prefix=$CLFS/cross-tools -host=$CLFS_HOST -target=$CLFS_TARGET -disable-multilib -with-sysroot=$CLFS -disable-nls -enable-shared -enable-languages=c,c+ -enable-_cxa_atexit -enable-c99 -enable-long-long -enable-threads=posix 这里加入了对C+的系列支持,多线程编程支持。在这里第三次的出现了-with-sysroot这个参数,它是建立交叉工具链的关键,也将解释为什么需要两次编译GCC。 make make install cd rm -rf gcc-4.2.1/ gcc-build/ popd,with-sysroot参数,-with-sysroot参数GCC在执行编译时是默认从/usr/include中找头文件来编译的,而binutils中的工具ld是从/lib /usr/lib、LD_LIBRARY_PATH、/etc/ld.so.conf等设置中所指定的路径搜索动态库或者静态库进行链接操作的,也就是说他们都会到根目录去寻找相关的东西,而我们进行交叉编译如果去连接主机的这些库和头文件,这样生成的二进制执行文件是不能在目标板上运行的。而-with-sysroot参数的功能正是让交叉工具以-with-sysroot指定的目录作为根目录,在这个下面寻找相关文件。,with-sysroot参数,三次-with-sysroot参数分别出现在Binutils、GCC第一次和GCC第二次中。 第一次,Binutils下使用,目的是让Binutils在查找库的时候到-with-sysroot指定的地方查,接着的glibc-headers和gcc都没有用到这个Binutils,这个交叉版的Binutils是后面安装目标系统Glibc和软件包时用到的; 第二次,第一次编译GCC下使用,目的是让这个GCC在编译的时候默认到-with-sysroot/usr/include下找头文件。 接着我们就开始编译目标体系平台下的Glibc了,这个时候交叉版本的Binutils和第一次编译的GCC都用上了,则我们也就清楚了,在编译这个 Glibc的时候是到$CLFS/usr/include里找头文件,到$CLFS/lib等目录下链接库的,不过Glibc是目标系统的第一个软件包,因此,他并不需要到$CLFS/lib等目录下的库链接,但交叉版本的Binutils还是顺利的完成了Glibc编译目录下自己众多库文件的链接工作。这里Binutils的-with-sysroot没有体现出来,但GCC的-with-sysroot已经发挥作用了。 第三次,实际上这次是为了替换掉第一次编译的gcc而重复的,所以可以理解和第二次使用-with-sysroot是一样的。,8.File软件包,tar xvf $DOWNLOADDIR/file-4.21.tar.gz -C $BUILDDIR pushd $BUILDDIR/file-4.21/ ./configure -prefix=$TARGET_DIR/cross-tools make make install cd rm -rf file-4.21/ popd Flex 包含一个工具,可用于生成识别文本中图形的程序。,7.Groff软件包,tar xvf $DOWNLOADDIR/groff-1.19.2.tar.gz -C $BUILDDIR pushd $BUILDDIR/groff-1.19.2/ PAGE=A4 ./configure -prefix=$CLFS/cross-tools -without-x make make install cd rm -rf groff-1.19.2/ popd,测试交叉工具,#include int main() printf(“HELLO!n“); return 0; 编译生成二进制文件 mipsel-linux-gnu-gcc -o hello hello.c 查看 file hello 将hello传到目标板上看是否能运行。,目标系统制作,export CC=“$CLFS_TARGET-gcc“ export CXX=“$CLFS_TARGET-g+“ export AR=“$CLFS_TARGET-ar“ export AS=“$CLFS_TARGET-as“ export RANLIB=“$CLFS_TARGET-ranlib“ export LD=“$CLFS_TARGET-ld“ export STRIP=“$CLFS_TARGET-strip“ echo export CC=“$CC“ /.bashrc echo export CXX=“$CXX“ /.bashrc echo export AR=“$AR“ /.bashrc echo export AS=“$AS“ /.bashrc echo export RANLIB=“$RANLIB“ /.bashrc echo export LD=“$LD“ /.bashrc echo export STRIP=“$STRIP“ /.bashrc,编译内核,Linux-2.6.17.6 tar xvf $DOWNLOADDIR/linux-2.6.22.6.tar.bz2 -C $BUILDDIR pushd $BUILDDIR/linux-2.6.22.6/ cp arch/mips/configs/qemu_defconfig .config make ARCH=mips CROSS_COMPILE=$CLFS_TARGET- menuconfig make ARCH=mips CROSS_COMPILE=$CLFS_TARGET- make ARCH=mips CROSS_COMPILE=$CLFS_TARGET- INSTALL_MOD_PATH=$CLFSmodules_install cp vmlinux $CLFS/boot/clfskernel-2.6.17.6 cp System.map $CLFS/boot/System.map-2.6.17.6 cp .config $CLFS/boot/config-2.6.17.6,目标系统制作(1),Man-pages-2.64 Binutils-2.18 GCC-4.2.1 Sed-4.1.5 一个流编辑程序,在一个输入流(从一个文件或者一个管道的输入)上进行基本的文本编辑操作。 E2fsprogs-1.40.2 提供用于 ext2 文件系统的工具。它还支持 ext3 日志文件系统。 Coreutils-6.9 软件包包括一整套基本的 shell 工具。 Iana-Etc-2.20 软件包提供了网络服务和协议的数据。 M4-1.4.10 M4 软件包包含一个宏处理器。,目标系统制作(2),Bison-2.3 包括一个语法分析程序生成器 Ncurses-5.6 提供字符终端处理库,包括面板和菜单。 Procps-3.2.7 用于监视系统进程的程序。 Libtool-1.5.24 一个通用库支持脚本,将使用动态库的复杂性隐藏在统一的、可移植的接口中。 Perl-5.8.8 Readline-5.2 一个提供命令行编辑和历史纪录功能的库集合。 Zlib-1.2.3 包含 zlib 库,很多程序中的压缩或者解压缩程序都会用到这个库。 Autoconf-2.61 生成用于自动配置源代码的 shell 脚本 Automake-1.10 与 Autoconf 配合使用,产生 Makefile 文件。 Bash-3.2 命令行解释器 Bzip2-1.0.4 包含了对文件进行压缩和解压缩的工具,对于文本文件,bzip2 比传统的 gzip 拥有更高压缩比。 Diffutils-2.8.7 软件包里的程序向你显示两个文件或目录的差异,常用来生成软件的补丁。 File-4.21 用来判断文件类型的工具。,目标系统制作(3),Findutils-4.2.31 包含查找文件的工具,既能即时查找(递归的搜索目录,并可以显示、创建和维护文件),也能在数据库里查找(通常比递归查找快但是在数据库没有及时更新的情况下,结果并不可靠)。 Flex-2.5.33 包含一个能生成识别文本模式的程序的工具。 Gawk-3.1.5 Gawk 软件包包含用于管理文本文件的程序。 Gettext-0.16.1 用于系统的国际化和本地化,可以在编译程序的时候使用本国语言支持(NLS),可以使程序的输出使用用户设置的语言而不是英文 Grep-2.5.3 可以搜索文件中符合指定匹配模式的行。 Groff-1.19.2 Groff 软件包包含几个处理和格式化文本的程序。Groff 把标准的文本和特殊的命令翻译成格式化的输出,就像你在 man 手册页里看到的那样。,目标系统制作(4),Gzip-1.3.12 包含用 Lempel-Ziv 编码(LZ77)来压缩和解压文件的程序。 Inetutils-1.5 Inetutils 包含基本的网络程序 IPRoute2-2.6.19-061214 包含了基本的和高级的基于 IPv4 网络的程序。 Kbd-1.13 包含键盘映射表和键盘工具。 Less-406 包含一个文本显示程序 Make-3.81 Make 自动地确定一个大型程序的哪些片段需要重新编译,并且发出命令去重新编译它们。 Man-1.6e Mktemp-1.5 此软件包包含用于在 shell 脚本中创建安全临时文件的程序。 Module-Init-Tools-3.2.2 处理内核模块,目标系统制作(5),Patch-2.5.9 根据“补丁“文件的内容来修改原来的文件。补丁文件通常是用 diff 程序创建的,包含如何修改文件的指导。 Psmisc-22.5 包含有用于显示进程信息的程序。 Shadow-4.0.18.1 Sysklogd-1.5 Sysvinit-2.86 Tar-1.18 Texinfo-4.9 Texinfo 软件包包含读取、写入、转换 Info 文档的程序。 Udev-115 软件包包含动态地创建设备节点的程序。 Util-linux-ng-2.13 Util-linux 软件包包含许多工具。其中比较重要的是加载、卸载、格式化、分区和管理硬盘驱动器,打开 tty 端口和得到内核消息 Vim-7.1,编译内核,tar xvf $DOWNLOADDIR/linux-2.6.18.1.tar.gz -C $BUILDDIR pushd $BUILDDIR/linux-2.6.18.1 make mrproper /这样可以确保内核源码树是绝对干净的 cp $DOWNLOADDIR/cq8401 .config & make ARCH=mips CROSS_COMPILE=$CLFS_TARGET- menuconfig & make ARCH=mips CROSS_COMPILE=$CLFS_TARGET- & make ARCH=mips CROSS_COMPILE=$CLFS_TARGET- INSTALL_MOD_PATH=$TARGET_DIR modules_install & cp vmlinux.32 $TARGET_DIR/boot/loongson-vmlinux-64-2.6.18.1 & cp System.map $TARGET_DIR/boot/loongson-System.map-64-2.6.18.1 cd popd,配置 setclock 脚本,setclock 脚本从硬件时钟,也就是 BIOS 或 CMOS 时钟读取时间。如果硬件时钟设置为 UTC ,这个脚本会使用 /etc/localtime 文件(这个文件把用户所在的时区告诉 hwclock 程序)将硬件时钟的时间转换为本地时间。没有办法自动检测硬件时钟是否设置为 UTC 时间,因此需要手动设置。 cat $TARGET_DIR/etc/sysconfig/clock “EOF“ # Begin /etc/sysconfig/clock UTC=1 # End /etc/sysconfig/clock EOF,配置 Linux 控制台,console 初始化脚本来设置键盘映射表和控制台字体 cat /etc/sysconfig/console /etc/inputrc # Allow the command prompt to wrap to the next line set horizontal-scroll-mode Off # Enable 8bit input set meta-flag On set input-meta On # Turns off 8th bit stripping set convert-meta Off # Keep the 8th bit for display set output-meta On # none, visible or audible set bell-style none # All of the following map the escape sequence of the value # contained in the 1st argument to the readline specific functions “eOd“: backward-word “eOc“: forward-word # for linux console “e1“: beginning-of-line “e4“: end-of-line “e5“: beginning-of-history “e6“: end-of-history “e3“: delete-char “e2“: quoted-insert # for xterm “eOH“: beginning-of-line “eOF“: end-of-line # for Konsole “eH“: beginning-of-line “eF“: end-of-line # End /etc/inputrc EOF,创建 /etc/inputrc 文件,设置inputrc 文件为特定的情况处理键盘映射,这个文件被 Readline 用作启动文件,Readline 是 Bash 和其它大多数 shell 使用的与输入相关的库。( bash下的键盘功能键设置) cat $TARGET_DIR/etc/inputrc “EOF“ set horizontal-scroll-mode Off set meta-flag On set input-meta On set convert-meta Off set output-meta On set bell-style none “eOd“: backward-word “eOc“: forward-word “e1“: beginning-of-line “e4“: end-of-line “e5“: beginning-of-history “e6“: end-of-history “e3“: delete-char “e2“: quoted-insert “eOH“: beginning-of-line “eOF“: end-of-line “eH“: beginning-of-line “eF“: end-of-line EOF,Bash Shell 的启动文件,设置Bash Shell启动文件(The Bash Shell Startup Files) cat $TARGET_DIR/etc/profile “EOF“ # Begin /etc/profile export LANG=zh_CN.UTF-8 export INPUTRC=/etc/inputrc # End /etc/profile EOF,配置 localnet 脚本,localnet 脚本的一部分工作是设置系统的主机名,这需要在 /etc/sysconfig/network 文件里配置。 echo “HOSTNAME=CLFS“ $TARGET_DIR/etc/sysconfig/network,创建 /etc/hosts 文件,在 /etc/hosts 文件里配置网卡的 IP 地址、FQDN 和可能会用的别名 cat $TARGET_DIR/etc/hosts “EOF“ # Begin /etc/hosts (no network card version) 127.0.0.1 CLFS localhost # End /etc/hosts (no network card version) EOF,设置DNS,cat $TARGET_DIR/etc/resolv.conf “EOF“ # Begin /etc/resolv.conf nameserver 你的首个DNS的地址 nameserver 你的第二DNS的地址 # End /etc/resolv.conf EOF,网络接口配置文件,pushd $TARGET_DIR/etc/sysconfig/network-devices & mkdir -v ifconfig.eth0 & cat ifconfig.eth0/ipv4 “EOF“ ONBOOT=yes SERVICE=ipv4-static IP=192.168.4.84 GATEWAY=192.168.4.1 PREFIX=24 BROADCAST=192.168.4.255 EOF popd,创建 /etc/fstab 文件,建立fstab文件 cat $TARGET_DIR/etc/fstab “EOF“ # Begin /etc/fstab # file system mount-point type options dump fsck # order /dev/hda4 /
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 厨师技能考试试题及答案
- 莆田市中储粮2025秋招面试专业追问题库购销统计岗
- 淄博市中石油2025秋招笔试模拟题含答案机械与动力工程岗
- 国家能源景德镇市2025秋招机械工程类面试追问及参考回答
- 绵阳市中石化2025秋招笔试模拟题含答案法律与合规岗
- 中国广电海东市2025秋招网申填写模板含开放题范文
- 中国广电漯河市2025秋招网申填写模板含开放题范文
- 宜昌市中石化2025秋招写作申论万能模板直接套用
- 大唐电力丹东市2025秋招机械工程专业面试追问及参考回答
- 2025年美学设计考试题及答案
- 五年级上册英语英语试题 Unit1-Unit2单元测试卷(无答案)译林版
- 2025中国铁路北京局集团有限公司招聘高校毕业生76人(三)笔试参考题库附带答案详解(10套)
- 浙教版2025-2026学年八年级上科学第1章 对环境的察觉 单元测试卷
- 基底细胞癌护理查房
- 2025保密观知识竞赛题库(试题附答案25个)
- 2025-2026学年人教版(2024)初中生物八年级上册(全册)教学设计(附目录)
- 煤矿监管培训方案
- 企业反腐倡廉培训课件
- 湿疮湿疹中医护理查房
- 2025年6月新《中华人民共和国治安管理处罚法》全文+修订宣贯解读课件(原创内容丰富且全)
- DB31/T 1377.4-2022实验鸡和鸭第4部分:设施及环境
评论
0/150
提交评论