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

本文详细介绍了Linux内核配置、交叉编译、基本根文件系统构建及安装bash的过程,包括使用make menuconfig安装依赖库,设置ARCH和CROSS_COMPLIE参数进行交叉编译,以及通过cp命令将系统库和bash安装到根文件系统中。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


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/*

由于我是直接在虚拟机里面进行的所以接下来的拷贝工作就不需要了

至此第三章操作完成!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值