精华内容
下载资源
问答
  • Linux From Scratch (LFS) 及其后代代表一种新方法,向用户揭示 Linux 操作系统是如何工作的。LFS 基于这样的假设,即一部分一部分地编译完整的操作系统不仅能够...本文将为大家介绍如何构建自己的Linux系统发行版 。
  • 手把手教你构建自己的LINUX系统.part1

    千次下载 热门讨论 2014-09-22 09:14:54
    《手把手教你构建自己的Linux系统》以如何使用源代码搭建一套Linux系统这一独特的角度介绍Linux系统的构成,主要内容包括走进GNU/Linux、LFS,Linux系统定制原理,制作GNU/Linux系统的准备工作,本地定制GNU/Linux...
  • 《手把手教你构建自己的Linux系统》以如何使用源代码搭建一套Linux系统这一独特的角度介绍Linux系统的构成,主要内容包括走进GNU/Linux、LFS,Linux系统定制原理,制作GNU/Linux系统的准备工作,本地定制GNU/Linux...
  • 手把手教你构建自己的Linux系统》以如何使用源代码搭建一套Linux系统这一独特的角度介绍Linux系统的构成,主要内容包括走进GNU/Linux、LFS,Linux系统定制原理,制作GNU/Linux系统的准备工作,本地定制GNU/Linux系统...
  • 用户要更改构建 Linux 发行版方式,不必要是程序员:只要从构建 LFS 系统学到一点脚本编写能力就足够了。LFS 专家可以改变和扩展 Linux 发行版完美组合,而不会影响它基本结构。对于有人员和专家维护 Linux ...
  • 构建自己的Linux 之一 基本框架

    千次阅读 多人点赞 2011-08-17 21:31:38
    构建自己的Linux 之一 基本框架 自己动手构建一个Linux不仅可以加深对Linux的理解,对嵌入式Linux的学习也有很大的帮助。构建一个自己的Linux(内核的编译,文件系统的制作,图形界面,驱动等)和开发嵌入式Linux...

    构建自己的Linux 之一 基本框架

    自己动手构建一个Linux不仅可以加深对Linux的理解,对嵌入式Linux的学习也有很大的帮助。构建一个自己的Linux(内核的编译,文件系统的制作,图形界面,驱动等)和开发嵌入式Linux的过程基本一样。

    1开发环境

    RedFlag Linux 6.0

    VMware 7.1.3build-324285

    2 添加磁盘

    添加一个新的虚拟硬盘,硬盘类型选择“IDE”,如下图所示:

     

    注意:一定选择IDE类型的虚拟磁盘,否则系统无法识别磁盘,会无法挂载文件系统!,在initrd.img中还要插入相应的内核模块。

    3查看磁盘

    启动虚拟机,在终端下查看刚刚添加的硬盘

    [root@localhost ~]# fdisk -l
    ...
    Disk /dev/sdc: 8589 MB, 8589934592 bytes
    255 heads, 63 sectors/track, 1044 cylinders
    Units = cylinders of 16065 * 512 = 8225280bytes
     
    Disk /dev/sdc doesn't contain a validpartition table

    4给硬盘分区

    [root@localhost ~]# fdisk /dev/sdc
    Device contains neither a valid DOSpartition table, nor Sun, SGI or OSF disklab
    el
    Building a new DOS disklabel. Changes willremain in memory only,
    until you decide to write them. After that,of course, the previous
    content won't be recoverable.
     
     
    The number of cylinders for this disk isset to 1044.
    There is nothing wrong with that, but thisis larger than 1024,
    and could in certain setups cause problemswith:
    1) software that runs at boot time (e.g.,old versions of LILO)
    2) booting and partitioning software fromother OSs
       (e.g., DOS FDISK, OS/2 FDISK)
    Warning: invalid flag 0x0000 of partitiontable 4 will be corrected by w(rite)
     
    Command (m for help): n   //添加一个新的分区
    Command action
      e   extended
      p   primary partition (1-4)
    p                //选择主分区
    Partition number (1-4): 1  
    First cylinder (1-1044, default 1): 1
    Last cylinder or +size or +sizeM or +sizeK(1-1044, default 1044): +100M//boot分区为100M
     
    Command (m for help): n
    Command action
      e   extended
      p   primary partition (1-4)
    p             //添加一个新的分区
    Partition number (1-4): 2
    First cylinder (14-1044, default 14): 14
    Last cylinder or +size or +sizeM or +sizeK(14-1044, default 1044): +2048M//主分区为2G
     
    Command (m for help): w   //写入分区表
    The partition table has been altered!
     
    Calling ioctl() to re-read partition table.
    Syncing disks.

    5查看分区

    [root@localhost ~]# fdisk -l
     
     
    Disk /dev/sdc: 8589 MB, 8589934592 bytes
    255 heads, 63 sectors/track, 1044 cylinders
    Units = cylinders of 16065 * 512 = 8225280bytes
     
      Device Boot      Start         End      Blocks  Id  System
    /dev/sdc1               1          13      104391  83  Linux
    /dev/sdc2              14         263    2008125   83  Linux

    6格式化为ext3格式

    [root@localhost ~]# mke2fs -j /dev/sdc1
    [root@localhost ~]# mke2fs -j /dev/sdc2

    7安装grub

    [root@localhost ~]#mkdir /mnt/boot
    [root@localhost ~]#mkdir /mnt/sysroot
    [root@localhost ~]# mount /dev/sdc1/mnt/boot //挂载分区
    [root@localhost ~]# mount /dev/sdc2/mnt/sysroot//挂载分区
    [root@localhost ~]# grub-install--root-directory=/mnt/ /dev/sdc //安装grub

    修改/mnt/boot/grub/device.map,只留下(hd0)   /dev/sda


     8修改initrd

    关于initrd的更多的资料,可以参看我前面写的文章(linux 2.6内核initrd.img文件分析)。

    [root@localhost ~]#cp /boot/vmlinuz-2.6.23.1-4/mnt/boot/vmlinuz
    [root@localhost ~]#cp /boot/initrd-2.6.23.1-4.img/mnt/boot/initrd.img
    [root@localhost ~]#mkdir /mnt/boot/1  //建立一个临时目录
    [root@localhost ~]#cp /mnt/boot/initrd.img /mnt/boot/new/initrd.img
    [root@localhost ~]#cd /mnt/boot/1
    [root@localhost 1]#gzip -dc initrd.img |cpio –idvm  //解压initrd.img
    [root@localhost 1]#cp/lib/modules/2.6.23.1-4/kernel/drivers/scsi/ide-scsi.ko/mnt/boot/1/lib

    修改/mnt/boot/1/init如下:

    #!/bin/nash
     
    mount -t proc /proc /proc
    setquiet
    echo Mounting proc filesystem
    echo Mounting sysfs filesystem
    mount -t sysfs /sys /sys
    echo > /sys/power/suspend2/do_resume
    echo Creating /dev
    mount -o mode=0755 -t tmpfs /dev /dev
    mkdir /dev/pts
    mount -t devpts -o gid=5,mode=620 /dev/pts/dev/pts
    mkdir /dev/shm
    mkdir /dev/mapper
    echo Creating initial device nodes
    mknod /dev/null c 1 3
    mknod /dev/zero c 1 5
    mknod /dev/systty c 4 0
    mknod /dev/tty c 5 0
    mknod /dev/console c 5 1
    mknod /dev/ptmx c 5 2
    mknod /dev/rtc c 10 135
    mknod /dev/tty0 c 4 0
    mknod /dev/tty1 c 4 1
    mknod /dev/tty2 c 4 2
    mknod /dev/tty3 c 4 3
    mknod /dev/tty4 c 4 4
    mknod /dev/tty5 c 4 5
    mknod /dev/tty6 c 4 6
    mknod /dev/tty7 c 4 7
    mknod /dev/tty8 c 4 8
    mknod /dev/tty9 c 4 9
    mknod /dev/tty10 c 4 10
    mknod /dev/tty11 c 4 11
    mknod /dev/tty12 c 4 12
    mknod /dev/ttyS0 c 4 64
    mknod /dev/ttyS1 c 4 65
    mknod /dev/ttyS2 c 4 66
    mknod /dev/ttyS3 c 4 67
    echo Setting up hotplug.
    hotplug
    echo Creating block device nodes.
    mkblkdevs
    echo "Loading uhci-hcd.ko module"
    insmod /lib/uhci-hcd.ko
    echo "Loading ohci-hcd.ko module"
    insmod /lib/ohci-hcd.ko
    echo "Loading ehci-hcd.ko module"
    insmod /lib/ehci-hcd.ko
    mount -t usbfs /proc/bus/usb /proc/bus/usb
    echo "Loading jbd.ko module"
    insmod /lib/jbd.ko
    echo "Loading ext3.ko module"
    insmod /lib/ext3.ko
    echo "Loading BusLogic.ko module"
    insmod /lib/BusLogic.ko
    echo "Loading libata.ko module"
    insmod /lib/libata.ko
    echo "Loading ata_piix.ko module"
    insmod /lib/ata_piix.ko
    echo Waiting for driver initialization.
    stabilized --hash --interval 250/proc/scsi/scsi
    echo "Loading ide-core.ko module"
    insmod /lib/ide-core.ko
    echo "Loading ide-disk.ko module"
    insmod /lib/ide-disk.ko
    echo "Loading ide-scsi.ko module"//添加SCSI硬盘驱动模块,增加IDE设备对SCSI的模拟,否则无法挂载文件系统
    insmod /lib/ide-scsi.ko
    mkblkdevs
    echo Creating root device.
    mkrootdev -t ext3 -o defaults,rw sda2 // 生成根目录设备  注意:一定要以rw(可读写)方式挂载,否则系统启动后无法修改和创建文件
    echo Mounting root filesystem.
    mount /sysroot
    echo Setting up other filesystems.
    setuproot
    echo Switching to new root and runninginit.
    switchroot

    修改完成后,下面生成新的initrd.img,先删除旧的initrd.img。

    [root@localhost 1]#del initrd.img
    [root@localhost 1]# find ./ | cpio -c -o> initrd.img
    26626 blocks
    [root@localhost 1]# gzip -9 initrd.img
    [root@localhost 1]# mv initrd.img.gzinitrd.img
    [root@localhost 1]#cp initrd.img /mnt/boot/initrd.img

    9再次修改grub

    [root@localhost ~]#cp /boot/message/mnt/boot/message //引导画面,可以去掉
    [root@localhost ~]#cp /boot/grub/grub.conf/mnt/boot/grub/grub.conf

    修改如下:

    default=0
    timeout=20
    gfxmenu (hd0,0)/message
    title EmbeddedCE123
           root(hd0,0)
           kernel/vmlinuz ro root=/dev/sda2
           initrd/initrd.img

    10构建文件系统

    10.1命令移植

    [root@localhost~]# cd /mnt/sysroot/
    [root@localhostsysroot]# mkdir -pv root bin sbin usr/{bin,sbin} lib dev tmp proc sys home mnt media boot  //创建文件系统的基本框架

    复制基本的命令 init bash。

    [root@localhost sysroot]#cp /bin/bash /bin/bash
    [root@localhostsysroot]#cp/sbin/init /sbin/init

    查看命令所依赖的可文件:

    [root@localhost sysroot]# ldd/bin/bash
            linux-gate.so.1 =>  (0xb7f2d000)
            libtermcap.so.2 =>/lib/libtermcap.so.2 (0xb7f12000)
            libdl.so.2 => /lib/libdl.so.2 (0xb7f0d000)
            libc.so.6 => /lib/libc.so.6(0xb7db6000)
            /lib/ld-linux.so.2 (0xb7f2e000)

    在宿主机中找到这些文件并拷贝到相应的目录下。同理,移植init命令。最后,这两个命令所需的库文件如下:

    libc-2.6.so  
    libdl.so.2      
    libtermcap.so.2
    ld-2.6.so     
    libc.so.6    
    libselinux.so.1 
    libtermcap.so.2.0.8
    ld-linux.so.2 
    libdl-2.6.so 
    libsepol.so.1

    10.2配置文件(/etc目录下的文件)

    inittab文件的内容如下:

    id:3:initdefault:
    si::sysinit:/etc/rc.d/rc.sysinit

    fstab文件的内容如下:

    /dev/sda2  /         ext3   defaults  0   0
    /dev/sda1  /boot     ext3   defaults  0   0
    sysfs      /sys      sysfs  defaults  0   0
    proc       /proc     proc   defaults  0   0
    tmpfs      /tmp      tmpfs  defaults  0   0
    tmpfs      /dev      tmpfs  defaults  0   0
    var        /dev      tmpfs  defaults  0   0

    rc.d/rc.sysinit文件的内容如下:

    #!/bin/bash 
    echo -e "                   Welcome to EmbeddedCE123 Linux"
    /bin/bash

    给rc.sysinit赋执行权限

    [root@localhostsysroot]# chmod +x /etc/rc.d/rc.sysinit            

    11测试

    新建一个虚拟机,选择linux2.6xx ,挂载上这块硬盘。效果如下图所示:








    展开全文
  • 构建自己的Linux系统

    2019-01-07 15:19:05
    最近在自制裁剪一套比较小的Linux系统,现在将流程记录下来,顺便分享一下 自制的Linux系统大小不到500M,相比原先的4.5G,结果还是比较满意,如果再去除掉一些驱动、命令还可以更小 在自制Linux 系统,我们需要...

    最近在自制裁剪一套比较小的Linux系统,现在将流程记录下来,顺便分享一下

    自制的Linux系统大小不到500M,相比原先的4.5G,结果还是比较满意,如果再去除掉一些驱动、命令还可以更小

    在自制Linux 系统,我们需要考虑的问题:

    1.磁盘,分区

    2.根文件系统

    3.引导系统

    4.内核

     

    首先你得有一个可以运行的系统,不论是USB,虚拟机,还是真机;这里使用的Ubuntu 18.04.1

    一、磁盘,分区

    1.准备一块磁盘,安装在机器上,大小大于20G最好

    2.进入Linux系统,初始化磁盘,进行分区,这里使用Gpt分区

        1).获取新安装的磁盘

    sudo fdisk -l | grep sd*

         可以看到有一块没有初始化的硬盘,我这里是 /dev/sdb

        2).初始化硬盘,我这里分6个区,我是为了兼容以前真机里面的一些设置,这里可以按自己的需求进行分区

    sudo /dev/sdb
    下面是fdisk工具的一些命令
    g:使用gpt分区格式
    n:新增一个分区
        新增分区后,选择分区号,我这里默认
        确定分区开始地址,默认即可
        确定分区结束地址,例如 你需要分配20G空间给该分区,输入:+20G;前面的+号一定要有
        分区出来的文件系统格式默认为ext4
    t:修改分区文件格式
    l:列出所有的文件系统格式
    输入文件系统格式的编号
    
    分配完所有分区以后记得保存
    w:保存 
    
    Disk /dev/sdb: 111.8 GiB, 120034123776 bytes, 234441648 sectors
    Units: sectors of 1 * 512 = 512 bytes
    Sector size (logical/physical): 512 bytes / 512 bytes
    I/O size (minimum/optimal): 512 bytes / 512 bytes
    Disklabel type: gpt
    Disk identifier: 952A121F-25E2-C449-8ECF-6C40AC0623F4
    
    Device         Start       End  Sectors  Size Type
    /dev/sdb1       2048      4095     2048    1M BIOS boot
    /dev/sdb2       4096    413695   409600  200M Linux filesystem
    /dev/sdb3     413696  84299775 83886080   40G Linux filesystem
    /dev/sdb4   84299776 178671615 94371840   45G Linux filesystem
    /dev/sdb5  178671616 182865919  4194304    2G Linux swap
    /dev/sdb6  182865920 234441610 51575691 24.6G Linux filesystem

        3).格式化系统分区

    格式化ext4分区
    sudo mkfs.ext4 /dev/sdb2
    sudo mkfs.ext4 /dev/sdb3
    sudo mkfs.ext4 /dev/sdb4
    sudo mkfs.ext4 /dev/sdb6
    
    格式化swap分区
    mkswap /dev/sdb2
    
    查看UUID
    sudo blkid
    
    /dev/sdb1: PARTUUID="807358de-0814-2142-8cbf-8a1ddc60af59"
    /dev/sdb2: UUID="43005813-2ac9-4d97-8e45-d2b798e328fe" TYPE="ext4" PARTUUID="a9098552-1d2d-8b43-a860-06a09499903b"
    /dev/sdb3: UUID="0b3d6f52-4103-48be-b9fa-8fe500a0a0f5" TYPE="ext4" PARTUUID="43e1cb52-4029-1f47-883f-4abc8a9fb4d8"
    /dev/sdb4: UUID="94934fc3-5c51-4338-8339-80e539e20b50" TYPE="ext4" PARTUUID="319fd72c-c97a-f540-915a-267cb3649a7a"
    /dev/sdb5: UUID="26947552-a25c-49ff-9d22-5aac14365349" TYPE="swap" PARTUUID="68df19bb-2339-b241-8972-c05fb31fdd5c"
    /dev/sdb6: UUID="08a96d35-b7d1-4fd6-bc2d-32912fd6d02e" TYPE="ext4" PARTUUID="d3d05ab4-0165-144f-8e7f-4307988e3dbf"

    二、准备根文件系统

    1.自己制作根文件

        1). 创建sysroot、boot目录

    sudo mkdir -pv {/mnt/boot, /mnt/sysroot}
    

    /mnt/boot 用来盛放Linux内核启动相关文件

    /mnt/sysroot 用来盛放Linux跟文件系统

        2).创建copycmd.sh 用来拷贝一些必要的命令

    #!/bin/bash
    #
    read -p "please input a excute cmd(eg:cat|bash|quit):" command
    [ -a /mnt/sysroot ]||mkdir /mnt/sysroot &>/dev/null
    cpdir () {
          cmd=`which $command`
          if [ -f  /mnt/sysroot$cmd ];then
               echo "the $cmd has been cp before"
           else
           local dir=`dirname $cmd`
             mkdir -p /mnt/sysroot$dir
             cp $cmd /mnt/sysroot$cmd
                    echo "cp $cmd finished"
              fi
    }
    cplib () {
              cmd=`which $command`
              ldd $cmd |egrep -o "/lib64.* "|while read i;do
                if  [ ! -f /mnt/sysroot$i ];then
                local dir=`dirname $i`
                 mkdir -p /mnt/sysroot$dir
                    cp $i /mnt/sysroot$i     
                        echo "cp $i  finished"
                else
                       echo "$i has been cp before"
                 fi
                done
              ldd $cmd | awk -F ' ' '{print $1}'|while read i;do
                if  [ ! -f /mnt/sysroot$i ];then
                local dir=`dirname $i`
                 mkdir -p /mnt/sysroot$dir
                    cp $i /mnt/sysroot$i     
                        echo "cp $i  finished"
                else
                       echo "$i has been cp before"
                 fi
                done
    }
    type $command&>/dev/null||{ echo the command is not exsit;exit 100; }
    until [ $command == quit ];do
    type $command&>/dev/null||{ echo the command is not exsit;exit 100; }
    cpdir
    cplib
    read -p "please input new excute cmd(eg:cat|bash|quit):" command
    cmd=`which --skip-alias $command`
    done

    拷贝命令如:bash,ls,cd,ifconfig,ping...

    3).创建其它根下的文件夹,如:etc,dev 等

    cd /mnt/sysroot
    
    mkdir {etc,dev,proc,sys,boot,home,var,root,mnt,tmp,lib}
    

    这里只是创建根文件系统的模型

    2.使用debootstrap工具,制作根文件系统

        1).安装debootstrap

    sudo apt-get install debootstrap
    

        2).创建sysroot、boot目录

    sudo mkdir -pv {/mnt/boot, /mnt/sysroot}

        3).下载最小化ubuntu 系统,需要设定平台架构--arch=amd64,以及确定版本bionic(18.04)

    debootstrap --arch=amd64  bionic    /mnt/sysroot  https://mirrors.ustc.edu.cn/ubuntu
    

     3.为根文件系统安装基本软件

        1).绑定资源

    sudo mount -o bind /dev  /media/ubuntu/dev
    sudo mount -o bind /dev/pts  /media/ubuntu/dev/pts
    sudo mount -o bind /etc  /media/ubuntu/etc
    sudo mount -o bind /proc /media/ubuntu/proc
    sudo mount -o bind /sys  /media/ubuntu/sys
    

        2).chroot进入最小化系统

    sudo  chroot /mnt/sysroot

        3).sudo 安装与passwd

    apt-get update
    apt-get install sudo
    passwd
    

        4).安装网络工具,以及dhcp服务

    apt-get install net-tools dhcpcd5
    

        5).退出最小化系统环境,解绑系统资源

    exit
    
    sudo umount -o bind /dev  /media/ubuntu/dev
    sudo umount -o bind /dev/pts  /media/ubuntu/dev/pts
    sudo umount -o bind /etc  /media/ubuntu/etc
    sudo umount -o bind /proc /media/ubuntu/proc
    sudo umount -o bind /sys  /media/ubuntu/sys

    4.挂载磁盘,将文件系统写入磁盘

        1).创建文件夹 /media/ubuntu

    sudo mkdir -pv /media/ubuntu/boot

        2).挂载磁盘

    sudo mount /dev/sdb6 /media/ubuntu
    sudo mount /dev/sdb2 /media/ubuntu/boot

        这里在上面分区时就决定以第6块分区sdb6(20G大小)做为/分区,第2块分区sdb2 200M为boot分区

        3).安装grub引导

    sudo grub-install --root-directory=/media/ubuntu /dev/sdb 
    sudo update-grub

        4).写入磁盘

    sudo rsync -a /mnt/sysroot/* /media/ubuntu/
    
    sudo rsync -a /boot/* /media/ubuntu/boot/
    同步boot时 也可以使用自己编译的内核,或者替换其他内核

    这里主要是使用rsync命令 实时同步刚刚创建的跟文件系统,以及将当前系统boot文件夹给同步

        5).修改fstab

    sudo vim /etc/fstab
    
    将分区UUID以及分区挂载的文件 写入
    # UNCONFIGURED FSTAB FOR BASE SYSTEM
    UUID=08a96d35-b7d1-4fd6-bc2d-32912fd6d02e / ext4 errors=remount-ro 0 1
    UUID=43005813-2ac9-4d97-8e45-d2b798e328fe /boot ext4 defaults 0 2
    UUID=0b3d6f52-4103-48be-b9fa-8fe500a0a0f5 /data ext4 defaults 0 2
    UUID=94934fc3-5c51-4338-8339-80e539e20b50 /database ext4 defaults 0 2
    UUID=26947552-a25c-49ff-9d22-5aac14365349 none swap sw 0 1

        6).修改grub配置文件/media/ubuntu/boot/grub/grub.cfg

    因为当前文件的内是我们正在使用的这个系统的配置文件,系统的磁盘分区的UUID不一样,也有可能使用了不一样的内核;否则进不了系统

    打开文件,

        1).搜索search --no-floppy --fs-uuid --set ,这段代码后面跟了一串UUID指向了boot分区的UUID;将UUID替换为/media/ubuntu/boot挂载的分区的UUID;这里可以使用vim 全局替换

    :%s/32669a74-c6cc-46ef-be17-7c822d0d698e/43005813-2ac9-4d97-8e45-d2b798e328fe/
    

    32669a74-c6cc-46ef-be17-7c822d0d698e为当前使用的系统的boot分区的UUID

    43005813-2ac9-4d97-8e45-d2b798e328fe为新的磁盘的boot分区的UUID

    2).搜索linux   /vmlinuz,这段代码后面跟了一串UUID指向了/分区的UUID;将UUID替换为/media/ubuntu/挂载的分区的UUID;这里可以使用vim 全局替换

    :%s/a90160ab-b509-466a-be2c-9674877c8333/43005813-2ac9-4d97-8e45-d2b798e328fe/
    

    a90160ab-b509-466a-be2c-9674877c8333 为当前使用的系统的/分区的UUID

    08a96d35-b7d1-4fd6-bc2d-32912fd6d02e 为新的磁盘的/分区的UUID

    3).系统内核镜像以及RAM disk映象

    一个完整的grub启动菜单项

    linux /vmlinuz-4.4.0-62-generic ...指的是内核镜像,这里可以修改为你需要使用内核镜像 后面跟是内核启动参数
    initrd  /initrd.img-4.4.0-62-generic 指的是RAM disk 临时根文件系统,这里面包含一些系统所需要的驱动模块

    menuentry 'Ubuntu' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-simple-a90160ab-b509-466a-be2c-9674877c8333' {
            recordfail
            load_video
            gfxmode $linux_gfx_mode
            insmod gzio
            if [ x$grub_platform = xxen ]; then insmod xzio; insmod lzopio; fi
            insmod part_gpt
            insmod ext2
            if [ x$feature_platform_search_hint = xy ]; then
              search --no-floppy --fs-uuid --set=root  32669a74-c6cc-46ef-be17-7c822d0d698e
            else
              search --no-floppy --fs-uuid --set=root 32669a74-c6cc-46ef-be17-7c822d0d698e
            fi
            linux   /vmlinuz-4.4.0-62-generic root=UUID=a90160ab-b509-466a-be2c-9674877c8333 ro net.ifnames=0 biosdevname=0
            initrd  /initrd.img-4.4.0-62-generic
    }

        4).修改最小化系统的休眠后恢复系统休眠前的状态,就是修改内核脚本/scripts/local-premount/写的脚本 resume脚本的配置文件件/etc/initramfs-tools/conf.d/resume

    RESUME=UUID=767d6d7f-74b8-4d48-854e-492fb0fc8dcd

    这里UUID指向新的磁盘的swap分区的UUID,不要写错了,不然启动会有问题,可见我上一篇文章Llinux内核启动时卡在Scanning for Btrfs filesystems

    到这里,就已经完了,这上面的每一步都非常重要 不能缺少;相较于制作跟文件系统两种方法,第一种与第二种的优缺点:

    第一种自己制作根文件系统:

    优点:占用空间小,可以最小化系统使用的服务,消耗资源少

    缺点:后期需要配置很多很多东西,相对来说比较麻烦

    第二种使用debootstrap:

    优点:后期配置较少

    缺点:相较第一种,占用空间、性能消耗等都要大一点

    建议使用第二种,简单

     

    最后重启,进入bios,最小化系统的磁盘作为启动盘启动;如果以上配置都正确,就可以成功启动该系统,如果不能启动,最多的问题就在grub上,好好看看自己的配置文件

     

     

     

    展开全文
  • 构建自己的Linux 之二 BusyBox移植

    千次阅读 多人点赞 2011-08-17 21:32:19
    构建自己的Linux 之二 BusyBox移植    BusyBox是一个集成了一百多个最常用linux命令和工具的软件,他甚至还集成了一个http服务器和一个telnet服务器,而所有这一切功能却只有区区1M左右的大小.我们平时用的...

    构建自己的Linux 之二 BusyBox移植

     

                  BusyBox是一个集成了一百多个最常用linux命令和工具的软件,他甚至还集成了一个http服务器和一个telnet服务器,而所有这一切功能却只有区区1M左右的大小.我们平时用的那些linux命令就好比是分立式的电子元件,而BusyBox就好比是一个集成电路,把常用的工具和命令集成压缩在一个可执行文件里,功能基本不变,而大小却小很多倍,在嵌入式linux应用中,BusyBox有非常广的应用,另外,大多数linux发行版的安装程序中都有BusyBox的身影,安装linux的时候按ctrl+alt+F2就能得到一个控制台,而这个控制台中的所有命令都是指向BusyBox的链接.

    配置BusyBox

    [root@localhost Desktop]# tar jxvf busybox-1.13.0.tar.bz2
    [root@localhost Desktop]# cd busybox-1.13.0
    [root@localhost busybox-1.13.0]#make menuconfig 
     
     
    [*] Build Busybox as a static binary (noshared libs)
    busyboxsettings->busybox library tuning->username completion、fancy shell prompts
    make menuconfig设置CROSS COMPILE为arm-linux-
    installoptin-->
         [*] Don't use /usr 防止编译后生成的文件安装到主机的/usr目录下,改变了主机的系统
    make install即可在_install目录下生成bin sbin及其linuxrc文件(该文件链接到/bin/busybox)。

    安装

    将bin sbin及其linuxrc复制到文件系统中(直接覆盖,以前lib中的库文件不需要啦!)。

    /etc目录下的配置文件

    /etc/inittab的内容如下:

    ::sysinit:/etc/init.d/rcS
    ::respawn:-/bin/sh
    #tty1::askfirst:-/bin/sh
    ::ctrlaltdel:/bin/umount -a –r

    /etc/fstab的内容如下:

    /dev/sda2   /         ext3  defaults   0   0
    /dev/sda1  /boot     ext3   defaults  0   0
    sysfs      /sys      sysfs  defaults  0   0
    proc       /proc     proc   defaults  0   0
    tmpfs      /tmp      tmpfs  defaults  0   0
    tmpfs      /dev      tmpfs  defaults  0   0
    var        /dev      tmpfs  defaults  0   0

    /etc/init.d的内容如下:

    #! /bin/sh
     
    /bin/mount –a

    测试

    效果如下图所示:













    展开全文
  • 对linux一直很向往,也用过ubuntu,但还是没有感受到linux的伟大,也许和自己是菜鸟有关,趁着寒假准备自己尝试编译linux系统,我准备照着手把手教你构建自己的Linux系统这本书试试。  这本书中主要分为了...
            对linux一直很向往,也用过ubuntu,但还是没有感受到linux的伟大,也许和自己是菜鸟有关,趁着寒假准备自己尝试编译linux系统,我准备照着手把手教你构建自己的Linux系统这本书试试。
    

        这本书中主要分为了五个部分
    • 准备篇,对定制linux基础的说明,和一些准备工作
    • 实践篇,利用虚拟机本地定制linux
    • 提高篇,制作便携式的linux
    • 进阶篇,交叉编译linux,
    • 挑战篇,制作GNU/Hurd系统

        交叉编译,在一种系统下产生另一个系统的可执行文件。 
        Hurd,GNU开发的操作系统核心,

        读完了前两章,第一章只是一些介绍,linux历史,GNU和linux关系等,第二章是定制原理,很多地方没看明白,等我完成实践篇的时候,再回来读一遍吧。
    展开全文
  • 如何用 SUSE Studio 构建 Linux 发行版? (1) 进入到www.susestudio.com,设立一个帐户 (2)为你设备(发行版)选择一个基本模板 -软件和软件包选择 (1)选择设备将随带软件和软件包 -配置 (1)在“个性化”...
  • 如何构建自己的 Linux 发行版求助于源代码以了解 Linux 基础和构建适当的 Linux级别: 初级Frank Pohlmann (frank@linuxuser.co.uk), 英国技术编辑2005 年 6 月 20 日Linux?From Scratch (LFS) 及其后代代表一种新...
  • 从头构建自己的Linux系统

    千次阅读 2017-02-03 13:28:14
    在博文“Linux系统启动过程分析”中我们了解了linux系统的启动流程,今天我们就来手动一步一步从头来构建一个最小的linux系统,然后用模拟器将其加载起来。常见的模拟器有Qemu、Bochs、VMWare、VPC、Virtual Box和...
  • 这里我们在《“多快好省”——交叉编译构建自己的linux操作系统》的基础上,使用busybox来构建initrd,在基于XFS文件系统的SATA硬盘上构建带有initrd的linux操作系统 设置编译环境 set +h umask 022 export LJOS=~/...
  • http://www.linuxfromscratch.org/
  • 基于vmware7.1和LFS6.7构建自己的linux   在几年前,我偶然接触到LFS,当时很感兴趣,于是参看网上的资料尝试编译了好几次,但刚开始就遇到一大堆的错误,让人很难继续走下去,最终都失败了,所以构建lfs的想法...
  • 实验目标:基于 Tiny Core 构建一款迷你 Linux 发行版系统。技能要点: 解构、重构 Linux 文件系统 解析、构建 Tiny Core 文件系统和软件包 制作支持U盘引导ISO镜像 使用虚拟机 QEMU 测试系统 SYSLinux 构建...
  • As a new linux ???? user, you might realize that there are a bunch of configuration files present in your system... 作为新的Linux用户,您可能会意识到系统中存在大量配置文件。 这些特殊文件称为“点文件”...
  • initrd和initramfs区别https://blog.csdn.net/htttw/article/details/7217706Linux内核在初始化之后会执行init进程,而init进程会挂载我们根...Linux2.6版以前方法是:除了内核vmlinuz之外还有一个独立in...
  • 在博文“Linux系统启动过程分析”中我们了解了linux系统的启动流程,今天我们就来手动一步一步从头来构建一个最小的linux系统,然后用模拟器将其加载起来。常见的模拟器有Qemu、Bochs、VMWare、VPC、Virtual Box和...
  • LFS-构建自己的linux

    2015-10-04 21:51:00
    2019独角兽企业重金招聘Python工程师标准>>> ...
  • 准备 TC wifi 模块包及所需要依赖库首先准备 wifi 模块和依赖库安装包列表(你也可以自己去准备,不过我这里已经准备了一个了)cd mylinux/ mkdir extends/wifi_module wget -O extends/wifi
  • 现在我们来简单定制一下 Tiny Core,或者说 MyLinux 桌面环境,我们将用到 mksquashfs 工具。设置主题风格首先我们在 mylinux 目录下创建一个新目录 extends(如果你之前没有创建),然后从 mylinux/cde/optional...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,266
精华内容 906
关键字:

构建自己的linux

linux 订阅