深度探索linux操作系統系統構建和原理解析第三章


3.3配置內核

make  menuconfig需要安裝如下

sudo apt-get install libncurses5-dev

3.3.1交叉編譯內核設置

make ARCH=i386 CROSS_COMPLIE=i686-none-linux-gnu-

ARCH是目標機  CROSS_COMPLIE是交叉編譯器的前綴也可以在頂成Makefile修改

3.3.2基本內核配置

make allnoconfig最小配置方法便於徹底定製

3.3.5中最後添加啓動項筆者有問題出現,具體解決方法請自行百度

3.4構建基本根文件系統

vita@lx-VirtualBox:/vita$  mkdir  -p  rootfs/lib

vita@lx-VirtualBox:/vita$   cp -d sysroot/lib/* rootfs/lib/

vita@lx-VirtualBox:/vita$ cp -d cross-tool/i686-none-linux-gnu/lib/lib\
> *.so.*[0-9]  rootfs/lib/

cp    -d     -d:若源文件爲連接文件杜屬性,則複製連接文件屬性而非文件本身

3.43安裝bash

vita@lx-VirtualBox:/vita/build$ tar xvf ../source/bash-4.2.tar.gz 


vita@vita@lx-VirtualBox:/vita/build/bash-4.2$ ./configure --prefix=/usr \
> --bindir=/bin --without-bash-malloclx-VirtualBox:/vita/build/bash-4.2$ ./configure --prefix=/usr \
> --bindir=/bin --without-bash-malloc

vita@lx-VirtualBox:/vita/build/bash-4.2$ make && make install DESTDIR=$SYSROOT

vita@lx-VirtualBox:/vita/build/bash-4.2$ echo $?
0
成功執行

vita@lx-VirtualBox:/vita$ mkdir rootfs/bin
vita@lx-VirtualBox:/vita$ cp sysroot/bin/bash rootfs/bin/


vita@lx-VirtualBox:/vita/cross-tool/bin$ vim ldd
vita@lx-VirtualBox:/vita/cross-tool/bin$ chmod a+x ldd

ldd腳本

<span style="font-size:18px;"></span><pre name="code" class="plain">#!/bin/bash

LIBDIR="${SYSROOT}/lib ${SYSROOT}/usr/lib
        ${CROSS_TOOL}/${PATH}/lib"
find() {
        for d in $LIBDIR;do
        found=""
        if [ -f "${d}/$1" ]; then
            found="${d}/$1"
            break
        fi
done
if [ -n "$found" ];then
        printf "%8s%s => %s\n" "" $1 $found
else
        printf "%8s%s => (not found)\n" "" $1
        fi
}
readelf -d $1  | grep NEEDED \
   | sed -r -e 's/.*Shared library :[ ]+\[(.*)\]/\1/;'\
   | while read lib ;do
find $lib
done


加上執行權限

chmod a+x ldd

腳本編寫好了之後樓主在執行

vita@lx-VirtualBox:/vita$ ldd rootfs/bin/bash
        0x00000001 => (not found)
        0x00000001 => (not found)
        0x00000001 => (not found)

不知到這是怎麼一回事??

3.4.4安裝跟文件系統到目標系統

vita@lx-VirtualBox:/vita$ i686-none-linux-gnu-strip rootfs/lib/* \
> rootfs/bin/*

由於我是直接在虛擬機裏面進行的所以接下來的拷貝工作就不需要了

至此第三章操作完成!!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章