1、Linux-2.6.22.5 API Headers
#头文件,安装位置/usr/include,里面的*.h都是头文件
#内核就相当于CPU,而头文件就相当于CPU的针脚,对CPU的操作都是通过针脚传命令进去的。
sed -i ‘/scsi/d’ include/Kbuild
#当前行的上一行插入/scsi/d
make mrproper
make headers_check
make INSTALL_HDR_PATH=dest headers_install
cp -rv dest/include/* /usr/include
2、Man-pages-2.63
make install
3、Glibc-2.5.1
#包含了主要的C库。这个库提供了基本例程,用于分配内存、搜索目录、打开关闭文件、读写文件、字串处理、模式匹配、数学计算等等。Glibc 的编译系统是高度自给自足的,即使当前编译器 specs 文件和连接器还指向 /tools 目录,也能正确安装
#安装位置:/usr/bin、/usr/lib
#包含的命令如:ldd、ldconfig
#包含的库文件:ld.so、libc
-—————————————————————–
tar -xvf ../glibc-libidn-2.5.1.tar.gz
mv glibc-libidn-2.5.1 libidn
sed -i ‘/vi_VN.TCVN/d’ localedata/SUPPORTED
#当前行的上一行插入/vi_VN.TCVN/d
sed -i \
‘s|libs -o|libs -L/usr/lib -Wl,-dynamic-linker=/lib/ld-linux.so.2 -o|’ \
scripts/test-installation.pl
sed -i ‘s|@BASH@|/bin/bash|’ elf/ldd.bash.in
mkdir -v ../glibc-build
cd ../glibc-build
../glibc-2.5.1/configure –prefix=/usr \
–disable-profile –enable-add-ons \
–enable-kernel=2.6.0 –libexecdir=/usr/lib/glibc
make
touch /etc/ld.so.conf
make install
make localedata/install-locales
cat > /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
#nsswitch.conf:系统数据库及名字服务开关配置文件
cp -v –remove-destination /usr/share/zoneinfo/Asia/Shanghai \
/etc/localtime
cat > /etc/ld.so.conf << “EOF”
# Begin /etc/ld.so.conf
/usr/local/lib
/opt/lib
# End /etc/ld.so.conf
EOF
4、调整工具链
mv -v /tools/bin/{ld,ld-old}
mv -v /tools/$(gcc -dumpmachine)/bin/{ld,ld-old}
mv -v /tools/bin/{ld-new,ld}
ln -sv /tools/bin/ld /tools/$(gcc -dumpmachine)/bin/ld
gcc -dumpspecs | sed \ -e ‘s@/tools/lib/ld-linux.so.2@/lib/ld-linux.so.2@g’ \ -e ‘/\*startfile_prefix_spec:/{n;s@.*@/usr/lib/ @}’ \ -e ‘/\*cpp:/{n;s@$@ -isystem /usr/include@}’ > \ `dirname $(gcc –print-libgcc-file-name)`/specs
测试:很重要
echo ‘main(){}’ > dummy.c
cc dummy.c -v -Wl,–verbose &> dummy.log
readelf -l a.out | grep ‘: /lib’
结果:[Requesting program interpreter: /lib/ld-linux.so.2]
grep -o ‘/usr/lib.*/crt[1in].*succeeded’ dummy.log
结果:
/usr/lib/crt1.o succeeded
/usr/lib/crti.o succeeded
/usr/lib/crtn.o succeeded
grep -B1 ‘^ /usr/include’ dummy.log
结果:
#include <…> search starts here:
/usr/include
grep ‘SEARCH.*/usr/lib’ dummy.log |sed ‘s|; |\n|g’
结果:
SEARCH_DIR(“/tools/i686-pc-linux-gnu/lib”)
SEARCH_DIR(“/usr/lib”)
SEARCH_DIR(“/lib”);
grep “/lib/libc.so.6 “ dummy.log
结果:attempt to open /lib/libc.so.6 succeeded
grep found dummy.log
结果:found ld-linux.so.2 at /lib/ld-linux.so.2
5、 Binutils-2.17
#Binutils 是一组开发工具,包括连接器、汇编器和其他用于目标文件和档案的工具。
#安装位置/usr/bin下
#包含的命令:as、ld
expect -c “spawn ls”
结果:spawn ls
mkdir -v ../binutils-build
cd ../binutils-build
../binutils-2.17/configure –prefix=/usr \
–enable-shared
make tooldir=/usr
make tooldir=/usr install
cp -v ../binutils-2.17/include/libiberty.h /usr/include
6、GCC-4.1.2
#GCC 软件包包含 GNU 编译器,其中有 C 和 C++ 编译器。
#安装位置/usr/bin
#包含的命令如gcc、c++、g++等
sed -i ‘s/install_to_$(INSTALL_DEST) //‘ libiberty/Makefile.in
sed -i ‘s/^XCFLAGS =$/& -fomit-frame-pointer/‘ gcc/Makefile.in
sed -i ‘s@\./fixinc\.sh@-c true@’ gcc/Makefile.in
sed -i ‘s/@have_mktemp_command@/yes/‘ gcc/gccbug.in
mkdir -v ../gcc-build
cd ../gcc-build
../gcc-4.1.2/configure –prefix=/usr \
–libexecdir=/usr/lib –enable-shared \
–enable-threads=posix –enable-__cxa_atexit \
–enable-clocale=gnu –enable-languages=c,c++
make
make install
ln -sv ../usr/bin/cpp /lib
ln -sv gcc /usr/bin/cc
测试
echo ‘main(){}’ > dummy.c
cc dummy.c -v -Wl,–verbose &> dummy.log
readelf -l a.out | grep ‘: /lib’
结果:
[Requesting program interpreter: /lib/ld-linux.so.2]
grep -o ‘/usr/lib.*/crt[1in].*succeeded’ dummy.log
结果:
/usr/lib/gcc/i686-pc-linux-gnu/4.1.2/../../../crt1.o succeeded
/usr/lib/gcc/i686-pc-linux-gnu/4.1.2/../../../crti.o succeeded
/usr/lib/gcc/i686-pc-linux-gnu/4.1.2/../../../crtn.o succeeded
grep -B1 ‘^ /usr/include’ dummy.log
结果:
#include <…> search starts here:
/usr/local/include
/usr/lib/gcc/i686-pc-linux-gnu/4.1.2/include
/usr/include
grep ‘SEARCH.*/usr/lib’ dummy.log |sed ‘s|; |\n|g’
结果:
SEARCH_DIR(“/usr/i686-pc-linux-gnu/lib”)
SEARCH_DIR(“/usr/local/lib”)
SEARCH_DIR(“/lib”)
SEARCH_DIR(“/usr/lib”);
grep “/lib/libc.so.6 “ dummy.log
结果:attempt to open /lib/libc.so.6 succeeded
grep found dummy.log
结果:found ld-linux.so.2 at /lib/ld-linux.so.2