精华内容
下载资源
问答
  • lz是因为拷贝了别人虚拟机文件,只拿到guest的密码,这样没有root权限完全不能安装软件,所以要破解虚拟机中ubuntu14.04的root密码。 Note: 鼠标从虚拟机中跳出来快捷键:ctrl+alt linux中查看所有用户及用户组相关...

    http://blog.csdn.net/pipisorry/article/details/38474827

    ubuntu 忘记用户名和密码

    (1)首先Restart系统(右上角下拉后有个选项)
    (2)长按Shift键,直到出现下面菜单。选择recovery mode,也就是恢复模式。
    (3)接下来会进入如下界面,选择Drop to root shell prompt ,也就是获取root权限。
    (4)在下面的# 后面敲入 cat /etc/shadow 查看用户名(如果连用户名都忘记的话)
    (5)敲入:passwd "用户名"    (引号要有的哦)之后再敲两次密码就可以了。
    (6)重启系统。

    Note: root登录系统后,修改密码时出现"authentication token manipulation error"

    This is the result of trying to work on a file system while mounted as read-only. The solution is a simple one. Before making changes to the users password mount the filesystem as read-write which allows for the necessary changes to be made.

    mount -o rw,remount /
    Now try to change the users passwords again.

    执行 mount -o rw,remount /  (执行后没有任何提示)即可修改。

    [ubuntu 忘记用户名和密码][ubuntu14.04 忘记了普通用户密码和root密码]

     

     

    lz是因为拷贝了别人虚拟机文件,只拿到guest的密码,这样没有root权限完全不能安装软件,所以要破解虚拟机中ubuntu14.04的root密码。

    Note: 鼠标从虚拟机中跳出来快捷键:ctrl+alt

    linux中查看所有用户及用户组相关命令

    groups 查看当前登录用户的组内成员
    groups gliethttp 查看gliethttp用户所在的组,以及组内成员
    whoami 查看当前登录用户名
     
    cat /etc/group文件包含所有组
    cat /etc/shadow和/etc/passwd系统存在的所有用户名

     

    linux普通用户获取root权限

    开启虚拟机时迅速点击鼠标进入虚拟机(或者重启时),长按shirft

    选择advanced options for ubuntu

    看到后面带recovery mode的选项按下字母e进入编辑页面,倒数第四行linux /boot/vm.......ro recovery \nomodeset 把那个ro改成rw,按F10启动recovery menu

    在recovery menu中选择root drop to root shell prompt

    将普通用户guest加入到sudo组中:#gpasswd –a guest sudo

    ctrl+alt+del重启

    进入系统使用普通用户guest登录,命令行中输入sudo su和普通用户guest的密码,能进入#就成功了,这样普通用户guest就有root权限了

    皮皮blog

     

     

    linux普通用户修改root密码

    进入grub菜单

    如果是双系统直接选择进入advanced options for ubuntu

    如果是虚拟机则重启ubuntu,随即长按shirft,再选择advanced options for ubuntu

    选中后面带recovery mode的选项(最好选择版本高的那个 ,别回车!),按下字母e进入编辑页面。(其实直接回车也可以,后面会给出说明。)

    光标向下移动到倒数第四行,会看到一行linux /boot/vm.......ro recovery \nomodeset,

    倒数第四行,会看到一行linux /boot/vm.......ro recovery \nomodeset,
    step 1: 删除recovery \nomodeset
    step 2: 在这行的最后添加 quiet splash rw init=/bin/bash

    有的可能只要把那个ro改成rw就可以了。如果usr挂载的是另外一个分区,这样修改后反而可能报错。因为恢复模式只挂载了根分区。

    Note: 如果没有把ro改成rw,下面修改密码时会出现authentication token manipulation error,这是因为磁盘是以只读方式挂载的,需要使用命令“mount -o rw,remount /”把根分区重新挂载成读写模式的。之后再重启进入时,rw又自动改回ro了,所以不用担心系统出什么问题。

    按F10, 启动

    进入shell界面,使用passwd命令设定新密码: passwd <用户名>
    Note: passwd命令还有可能找不到。这是因为passwd命令在/usr/bin下,如果usr挂载的是另外一个分区,由于这个分区载恢复模式没有挂载导致passwd命令找不到。解决办法是重新挂载usr分区。可以将所有分区都挂载起来,或者使用cat命令查看/etc/fstab[和/etc/mstab(这个应该不需要查看)]找到挂载点为usr的分区,然后用mount命令将其挂载。然后就可以执行passwd命令了。

    输入新密码,再次输入新密码,看到password updated successfully即为成功​

    ctrl+alt+del重启   #在单用户改过密码后不要reboot,直接init3 或startx

    修改密码成功!

     

    如果只是修改ro为rw之后只用在recovery menu中选择root drop to root shell prompt,然后回车

    ctrl+d退出,选择resume就重启了

     

    不过在虚拟机中使用root修改普通用户密码成功,但是界面中输入时仍提示invalid

    虚拟机中root修改普通用户登录密码后输入正确密码也提示invalid

    单用户模式修改普通用户密码成功后还是登录不了

    这就是说,root密码可以修改成功,而普通用户的密码修改成功却不能登录使用,很奇怪。

    [ubuntu 进入单用户模式的方法]

    [Ubuntu 14.04忘记root密码的解决方法*]

    [Ubuntu Linux在未知root密码的情况下修改root密码]

    from:http://blog.csdn.net/pipisorry/article/details/38474827

     

    展开全文
  • 修改boot.img制作内置root权限

    千次阅读 2019-11-25 17:22:04
    复制fbe_bypass.sh,launch_daemonsu.sh,tar三个文件到/sbin下,修改launch_daemonsu.sh文件,判断/data/adb/su/bin是否存在,如果不存在则解压root.tar到指定目录。【注意,下方的各种代码,英文单引号 ´ 论坛里...

    准备工作:

    1. 下载 官方Full-OTA update.zip。从这里找 pro-teammt.ru/firmware-database/?firmware_model=&firmware_page=1 ,搜搜自己的手机型号(可从“关于手机/型号”中查看),比如 荣耀V10高配版为BKL-AL20。下载大于1G甚至2G的FULL-OTA的update.zip文件。下载完成后解压,得到update.app文件
    2. Huawei update extrator,下载地址:forum.xda-developers.com/showthread.php?t=2433454 ,该软件可解包上述update.app文件,提取出ramdisk.img和vendor.img
    3. Bootimg.exe,下载地址:github.com/cofface/android_bootimg 这个工具用来解包ramdisk.img
    4. ROM助手,rom大师,随便什么,能打开vendor.img的。
    5. 下载supersu beta版,到xda-developor论坛自行下载,本文编写是的版本为supersu beta 2.82 sr5。

    开始动手:
    6. 解压update.zip得到update.app
    7. 用Huawei update extrator解包update.app(解包前,先到设置中,去掉 verify header checksum,否则打不开)
    8. 把ramdisk.img和vendor.img提取出来
    9. 把ramdisk.img改名为boot.img,并与bootimg.exe放到同一个文件夹
    10. 在该文件夹启动cmd(文件→打开命令行提示符),输入bootimg.exe --unpack-bootimg,解包
    11. 解包后,编辑initrd文件夹下的init.rc文件,在import /init.${ro.zygote}.rc下添加一行import init.supersu.rc
    12. 删除verity_key
    13. 解压supersu,把supersu的文件按照这个文件树重新组织,并打包成root.tar (注意,是tar,用tar cvf 命令)

    #  压缩文件 C:\android_bootimg-master\root.tar
    SuperSU.apk
    supersu_install
    supersu_install\bin
    supersu_install\bin\su
    supersu_install\bin\daemonsu
    supersu_install\bin\supolicy
    supersu_install\bin\supolicy_wrapped
    supersu_install\bin\sukernel
    supersu_install\xbin
    supersu_install\lib
    supersu_install\lib\libsupol.so
    supersu_install\etc
    supersu_install\su.d
    supersu_install\file_contexts
    supersu_install\supersu_is_here
    

    root.tar与supersu压缩包中文件的对应关系为:
    bin/su = bin/daemon=arm64/su
    bin/sukernel=arm64/sukernel
    bin/supolicy_wrapped=arm64/supolicy
    bin/supolicy=arm64/supolicy
    lib/libsupol = arm64/libsupol
    file_contexts=common/file_contexts
    supersu_is_here=common/supersu_is_here

    复制完,别忘了chmod +x supolicy 等等

    1. 复制上面打包好的root.tar到/res/.su下
    2. 复制fbe_bypass.sh,launch_daemonsu.sh,tar三个文件到/sbin下,修改launch_daemonsu.sh文件,判断/data/adb/su/bin是否存在,如果不存在则解压root.tar到指定目录。【注意,下方的各种代码,英文单引号 ´ 论坛里会自动变掉,请自己复制代码后,把英文引号改正确】
    # copy boot image backups
    log_print "copying boot image backups from /cache to /data"
    cp -f /cache/stock_boot_* /data/. 2>/dev/null
    
    if ($SBIN); then
      if [ ! -d "/data/adb/su/bin" ]; then
        /sbin/tar xvf /res/.su/root.tar -C /data
      fi
    

    上方代码片段的最后三行为需要新增的。

    1. 给init打补丁:找一台使用supersu2.6以上版本root过的手机,之后在cmd里输入:
    adb push init /sdcard/init
    adb shell
    su
    

    在手机上允许root权限,继续输入
    【注意,下方的各种代码,英文单引号 ´ 论坛里会自动变掉,请自己复制代码后,把英文引号改正确】

    sed -i ´s/\/system\/etc\/selinux\/plat_sepolicy.cil/\/system\/etc\/selinux\/plat_sepolicy.xxx/g´ /sdcard/init
    

    init文件就打好补丁了,把init文件复制出来,可以使用adb pull

    adb pull /sdcard/init init
    

    init文件就拉取到与电脑上adb的同目录了。
    用打好补丁的init复制到initrd下,替换官方的init。
    12. 给sepolicy打补丁,由于EMUI8使用了split sepolicy,所以ramdisk下没有sepolicy文件,不过你可以从vendor.img中找到他,用ROM助手打开vendor.img,复制/etc/selinux/precompiled_sepolicy出来,改名为sepolicy。之后同样,用已使用supersu2.6版本以上root过的手机,继续操作如下:

    adb push sepolicy /sdcard/sepolicy
    adb shell
    su
    supolicy --file /sdcard/sepolicy /sdcard/sepolicy_out --sdk=26
    

    注意,注意!!!千万不要忘记后面的–sdk=26,这是网上各种教程,无论国内国外都没提及的,这里让我踩了好几天的坑!!
    这样,sepolicy文件也打好补丁了。把sepolicy_out文件复制出来,改名为sepolicy,放到initrd目录下。
    13. 更改 cpiolist.txt 文件,把我们新增的几个文件和文件夹加到里面,这个请参考如下:

    compress_level:6
    dir . 0755
    dir acct 0755
    slink bugreports /data/user_de/0/com.android.shell/files/bugreports 0644
    dir cache 0770
    slink charger /sbin/charger 0644
    dir config 0500
    slink d /sys/kernel/debug 0644
    dir data 0771
    slink default.prop system/etc/prop.default 0600
    dir dev 0755
    dir dload 0755
    file dload/update_huawei_dload.zip initrd/dload\update_huawei_dload.zip 0644
    slink etc /system/etc 0644
    file fstab.zram1024m initrd/fstab.zram1024m 0640
    file fstab.zram1280m initrd/fstab.zram1280m 0640
    file fstab.zram1536m initrd/fstab.zram1536m 0640
    file fstab.zram2240m initrd/fstab.zram2240m 0640
    file fstab.zram256m initrd/fstab.zram256m 0640
    file fstab.zram512m initrd/fstab.zram512m 0640
    file fstab.zram768m initrd/fstab.zram768m 0640
    file init initrd/init 0750
    file init.environ.rc initrd/init.environ.rc 0750
    file init.rc initrd/init.rc 0750
    file init.supersu.rc initrd/init.supersu.rc 0750
    file init.usb.configfs.rc initrd/init.usb.configfs.rc 0750
    file init.usb.rc initrd/init.usb.rc 0750
    file init.zygote32.rc initrd/init.zygote32.rc 0750
    file init.zygote64_32.rc initrd/init.zygote64_32.rc 0750
    dir mnt 0755
    dir oem 0755
    dir patch 0755
    dir patch/cust 0755
    dir patch/cust/upper 0755
    dir patch/cust/work 0755
    dir patch/product 0755
    dir patch/product/upper 0755
    dir patch/product/work 0755
    dir patch/system 0755
    dir patch/system/upper 0755
    dir patch/system/work 0755
    dir patch/vendor 0755
    dir patch/vendor/upper 0755
    dir patch/vendor/work 0755
    dir patch_hw 0755
    dir proc 0755
    dir res 0755
    file res/keys initrd/res\keys 0644
    file res/native_packages.xml initrd/res\native_packages.xml 0644
    file resetFactory.cfg initrd/resetFactory.cfg 0644
    dir res/.su 0750
    file res/.su/root.tar initrd/res\.su\root.tar 0750
    file rootscan.conf initrd/rootscan.conf 0644
    dir sbin 0750
    file sbin/adbd initrd/sbin\adbd 0750
    file sbin/charger initrd/sbin\charger 0750
    file sbin/cota initrd/sbin\cota 0750
    file sbin/cust initrd/sbin\cust 0750
    file sbin/cust_init initrd/sbin\cust_init 0750
    file sbin/factory_reset initrd/sbin\factory_reset 0750
    file sbin/fbe_bypass.sh initrd/sbin\fbe_bypass.sh 0700
    file sbin/fsck.f2fs_s initrd/sbin\fsck.f2fs_s 0750
    file sbin/hdbd initrd/sbin\hdbd 0750
    file sbin/huawei_dload initrd/sbin\huawei_dload 0750
    file sbin/hw_ueventd initrd/sbin\hw_ueventd 0750
    file sbin/kmsgcat initrd/sbin\kmsgcat 0750
    file sbin/launch_daemonsu.sh initrd/sbin\launch_daemonsu.sh 0700
    file sbin/logctl_service initrd/sbin\logctl_service 0750
    file sbin/ntfs-3gd initrd/sbin\ntfs-3gd 0750
    file sbin/oeminfo_nvm_server initrd/sbin\oeminfo_nvm_server 0750
    file sbin/resize.f2fs_s initrd/sbin\resize.f2fs_s 0750
    file sbin/tar initrd/sbin\tar 0750
    slink sbin/ueventd ../init 0750
    file sbin/volisnotd initrd/sbin\volisnotd 0750
    slink sbin/watchdogd ../init 0750
    file sbin/xlogcat-early initrd/sbin\xlogcat-early 0750
    slink sdcard /storage/self/primary 0644
    file sepolicy initrd/sepolicy 0644
    dir storage 0751
    dir .subackup 0
    file .subackup/0000_fstab.zram1024m initrd/.subackup\0000_fstab.zram1024m 0640
    file .subackup/0001_fstab.zram1280m initrd/.subackup\0001_fstab.zram1280m 0640
    file .subackup/0002_fstab.zram1536m initrd/.subackup\0002_fstab.zram1536m 0640
    file .subackup/0003_fstab.zram2240m initrd/.subackup\0003_fstab.zram2240m 0640
    file .subackup/0004_fstab.zram256m initrd/.subackup\0004_fstab.zram256m 0640
    file .subackup/0005_fstab.zram512m initrd/.subackup\0005_fstab.zram512m 0640
    file .subackup/0006_fstab.zram768m initrd/.subackup\0006_fstab.zram768m 0640
    file .subackup/0007_init initrd/.subackup\0007_init 0750
    file .subackup/0008_init.rc initrd/.subackup\0008_init.rc 0750
    file .subackup/0009_verity_key initrd/.subackup\0009_verity_key 0644
    file .subackup/index initrd/.subackup\index 0644
    dir sys 0755
    dir system 0755
    file ueventd.rc initrd/ueventd.rc 0644
    dir vendor 0755
    file version.prop initrd/version.prop 0644
    
    1. 最后,重新打包,输入bootimg.exe --repack-ramdisk,看看有没有报错,如果没有,再输入bootimg --repack-bootimg,会生成一个boot-new.img文件。

    你就得到了一个内置root权限的boot.img,使用fastboot flash ramdisk boot-new.img 刷到手机里吧。

    题外话,你可以不看,仅供部分同学需要:
    对于SpilitSepolicy设备,除提取vendor下的precompiled_sepolicy外,还可以自己使用官方文件编译,很简单。
    首先找到如下几个文件:
    PLAT_CIL="/system/etc/selinux/plat_sepolicy.cil"
    MAPPING_CIL=KaTeX parse error: Can't use function '\.' in math mode at position 55: …g | grep -m 1 "\̲.̲cil")
    NONPLAT_CIL="/vendor/etc/selinux/nonplat_sepolicy.cil"
    POLICY_VERSION=$(cat /sys/fs/selinux/policyvers)

    其中MAPPING_CIL在荣耀V10上B132版本上,是/system/etc/selinux/mapping/26.0.cil
    之后,使用系统中已经内置的secilc编译,编译格式:
    secilc “ P L A T C I L " − M t r u e − c " PLAT_CIL" -M true -c " PLATCIL"Mtruec"POLICY_VERSION” “ M A P P I N G C I L " " MAPPING_CIL" " MAPPINGCIL""NONPLAT_CIL” -o /sdcard/sepolicy -f /dev/null
    如果提示没有权限,你可以先把这些文件都adb pull 出来,之后复制到sdcard上,之后再编译,比如:
    【注意,下方的各种代码,英文单引号 ´ 论坛里会自动变掉,请自己复制代码后,把英文引号改正确】

    secilc "/sdcard/sepolicy/system/etc/selinux/plat_sepolicy.cil" -M true -c "30" "/sdcard/sepolicy/system/etc/selinux/mapping/26.0.cil" "/sdcard/sepolicy/vendor/etc/selinux/nonplat_sepolicy.cil" -o /sdcard/sepolicy/sepolicy -f /dev/null
    

    这样同样可以得到sepolicy文件,之后再把这个文件用上文所说的方法用supolicy去patch一下,同样可正常使用。

    文章转自:https://club.huawei.com/thread-14889191-1-1.html

    展开全文
  • Linux启动盘boot/root盘的制作

    千次阅读 2010-07-15 16:24:00
    Linux启动盘boot/root盘的制作 boot/root盘由两部分组成,即核心和根文件系统 。要把这两部分都放到一个1.44MB的软盘上去, 通常要对内核和根文件系统进行压缩,压缩核心的最好方法是进行重新编译内核,将...

    Linux启动盘boot/root盘的制作

    boot/root盘由两部分组成,即核心和根文件 系统 。要把这两部分都放到一个1.44MB的软盘上去, 通常要对内核和根文件系统进行压缩,压缩核心的最好方法是进行重新编译内核,将一些不必要的支持去掉,如对网络 和其它周边设备的支持,重要的一点是记住内核必须支 持RAMDISK及ext2,否则系统不能正常引导。关于内核的编译本文不再阐述,下面重点介绍如何生成根文件系统的压缩包。对于根文件系统的压缩包括两 方面的问题 ,第一是只保留必要的根文件系统组件,第二是将根文 件系统做成一个压缩包,类似于内核工作的原理。

      (1)根文件系统概述

      一个根文件系统必须包括支持完整Linux 系统的全部东西,它至少应包括以下几项:

      基本文件系统结构
      至少含有以下目录:/dev、 /proc、 /bin、 /etc、 /lib、 /usr、 /tmp
      最基本的应用程序 ,如sh、 ls、 cp、 mv等
      最低限度的配置 文件,如rc、 inittab、 fstab等
      设备:/dev/hd*、 /dev/tty*、 /dev/fd0
      基本程序运行所需的库函数

      以上所需文件一般情况下会超过1.44M,因此我们通常的做法是先准备好内容后再压缩到软盘中,当用软盘启动时,再把文件解压到内存 中,形成一个虚拟盘(RAMDISK),通过 RAMDISK控制系统启动。

      为了能创建以上的根文件系统,你必须有一个空闲的能够放下大约4MB文件的RAMDISK。系统缺省情况下已替我们建好了一个大小为4096KB的 RAMDISK,其设备名一般为/dev/ram0,我们就使用它来保存我们预先准备好的根文件系统。
      
      (2) 创建根文件系统

      Linux内核识别两种可以直接拷贝到RAMDISK的文件系统,它们是minix 和ext2,ext2性能更好。mke2fs缺省情况下在1.44M的软盘上产生360个信息节点,使用压缩格式的根文件系统需要更多的信息节点,所以使 用如下命令创建文件系统可以创建2000个信息节点,而且一般不会用完。

      mke2fs -m 0 -i 2000 /dev/ram0

      mke2fs将会自动 判断设备容量的大小并相应地配置自身,-m 0参数防止它给root保留空间,这样会腾出更多的有用空间。接着把虚拟盘挂在节点/mnt上:

      mount -t ext2 /dev/ram0 /mnt/floppy

    接着是创建目录。根文件系统最少应该有如下8个目录:

      /dev — 设备
      /proc — proc 文件系统所需目录
      /etc — 系统配置文件
      /sbin — 重要的系统程序
      /bin — 基本应用程序
      /lib — 共享函数库
      /mnt — 装载其他磁盘节点
      /usr — 附加应用程序
      执行如下命令创建这些目录:
      #cd /mnt/floppy
      #mkdir dev proc etc sbin bin lib mnt usr

      接下来的工作就是确定各个目录下的内容了:

      /dev:/dev中含有系统不可缺少的设备文件。可以把现有系统中/dev的文件拷贝过来,然后删除不必要的文件。命令cp -dpR /dev /mnt会拷贝/dev整个目录但不拷贝文件内容,dp开关保证链接文件仍然不变,不会拷贝链接所指原文件,而且属性不变。如果你没有SCSI设备,删除 所有的以sd开头的文件。如果你不想使用串口设备,删除所有以cua开头的文件。不过记住一定要保留console、kmem、mem、null、 ram、tty1等文件。

      /etc:这个目录中含有一些必不可少的系统配置文件。这下面的文件比较多,那么到底哪些文件是必需的,哪些可有可无呢?由于这下面的文件一般是一些 文本文件,都不是很大,干脆全部保留算了。

      我的启动盘中含有不到15个配置文件,大致可分为3部分:

      rc.d/* — 系统启动脚本
      fstab — 列出要登录的文件系统
      inittab — 包含启动过程参数

      而且这些文件都是最简单的。rc应该包括:

      #!/bin/sh
      /bin/mount -av
      /bin/hostname yjy
      fstab应包括:
      /dev/ram0 / ext2 defaults
      /dev/fd0 / ext2 defaults
      /proc /proc proc defaults
      inittab包括:
      id:2:initdefault:
      si::sysinit:/etc/rc
      1:2345:respawn:/sbin/getty 9600 tty1
      2:23:respawn:/sbin/getty 9600 tty2

    /bin和/sbin:该目录中包含有必不可少的应用程序,如ls, mv, cat,你可以根据自己的需要选择,不过一定要记住包括以下程序:init, getty,login, mount,运行你的rc的外壳shell。

      /lib: 该目录中包含有你的启动盘启动过程中所需要的共享函数库,如果缺少必须的函数库,系统会停止启动或出现一大堆错误信息,所以一定要注意。

      几乎所有的程序都需要libc库,列一下目录/lib中的libc:

       ls -l /lib/libc*
      -rwxr-xr-x 1 root root 4016683 Apr 16 18:48 libc-2.1.1.so*
      lrwxrwxrwx 1 root root 13 Apr 10 12:25 libc.so.6 -> libc-2.1.1.so*
      libc.so.6的6表示版本号,它指向的文件才是你真正需要的。

      查看每一个程序使用的函数库,用命令ldd,如:

       ldd /sbin/mke2fs
      libext2fs.so.2 => /lib/libext2fs.so.2 (0x40014000)
      libcom_err.so.2 => /lib/libcom_err.so.2 (0x40026000)
      libuuid.so.1 => /lib/libuuid.so.1 (0x40028000)
      libc.so.6 => /lib/libc.so.6 (0x4002c000)
      /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)

      输出右边的库都是必须的,有的可能是链接文件。

      在/lib目录下你还必须有函数库装载器,这个装载器或是ld.so (对 a.out 库) 或是 ld-linux.so (对 ELF 库)。新版本的ldd一般会告诉你所需库的装载器。

      把装载器和库拷贝到/lib后,再仔细检查一遍,一定保证没有遗漏。

       模块

      如果你有一个模块化的内核,你还得考虑需要加载的模块,它们都位于/lib/modules,你可以把不是很重要的模块放到别的盘上,当系统启动后再 加载,这样会节省启动盘的空间。

       打包

      一旦你完成了上述工作,卸下虚拟盘,拷贝到一个文件中,然后压缩。

      umount /mnt
      dd if=/dev/ram0 bs=1k | gzip -v9>rfs.gz

      压缩结束后,你就拥有了一个压缩的根文件系统,不过你得检查它的大小,如果大了,你还得删除一些东西。

      (3) 组织引导盘

      有了根文件系统和内核之后,最后的工作就是把它们组织在一起。

      先检查总文件的大小,如果超出1.44MB,就得考虑重新创建所需或用两张磁盘,即使用两张磁盘,你的根文件系统也得小于1.44MB。

    接着就是确定是用LILO控制启动还是直接用拷贝到盘上的内核控制启动。用LILO的好处是你能增加支持初始化硬件的参数到内核中,缺点是较复杂且占用珍 贵的磁盘空间,不过我还是建议 使用LILO控制系统启动。下面我就介绍用LILO 的过程,直接用拷贝到盘上的内核控制启动的方法就不作叙述了。

      用LILO控制启动首先就得写一个LILO配置文件,以下是一个最简单的配置文件,但是已经够用了。

      boot =/dev/fd0
      install =/boot/boot.b
      map =/boot/map
      read-write
      backup =/dev/null
      compact
      image = KERNEL
      label = Bootdisk
      root =/dev/fd0

      参数说明见相关资料。然后把它命名为bdlilo.conf。 接下来就是创建一个内核文件系统。把一张干净的软盘插入软驱,在上面创建ext2文件 系统。

      mke2fs -i 8192 -m 0 /dev/fd0 50
      “-i 8192”表示每8192位创建一个信息节点。接着登录系统:
      mount /dev/fd0 /mnt/floppy
      rm -rf /mnt/floppy/lost+found
      mkdir /mnt/floppy{boot,dev}
      删去目录/ lost+found,创建两个目录/boot和/dev,再执行:
      cp -R /dev/{null,fd0} /mnt/floppy/dev
      接着拷贝启动加载器boot.b到目录/boot中,
      cp /boot/boot.b /mnt/floppy/boot
      最后,拷贝你创建的配置文件bdlilo.conf和内核到内核文件系统的根目录下,
      cp bdlilo.conf KERNEL /mnt/floppy

      现在,根文件系统所需的所有文件都准备就绪了。再执行下面的命令可以帮助安装 LILO引导器到软盘的根文件系统上面:

      lilo -v -C bdlilo.conf -r /mnt

      OK,可以运行它了,如果运行结果没有错误就表明成功,否则就应该仔细检查一下上面的设置
    1. 软盘上安装引导器(grub)

    一般制作 软盘上跑的linux引导器都使用syslinux 这个工具 (这个工具不支持ext2分区 格式,只能支持fat分区格式),因为我对grub 比较熟悉,并且我在软盘上安装grub只用了132KB空间,不是很耗磁盘空间。
    具体操作如下:

    # mke2fs /dev/fd0

    创建了 ext2 文件系统后,需要安装该文件系统:

    # mount /dev/fd0 /mnt/floppy

    现在,需要创建一些目录,并将一些关键文件(原先安装 GRUB 时已安装了这些文件)复制到软盘:

    # mkdir /mnt/floppy/boot
    # mkdir /mnt/floppy/boot/grub
    # cp /boot/grub/stage1 /mnt/floppy/boot/grub
    # cp /boot/grub/stage2 /mnt/floppy/boot/grub

    再有一个步骤,就能得到可用的引导盘。

    在linux bash中,从 root 用户运行“grub”,该程序非常有趣并值得注意,因为它实际上是 GRUB 引导装入器的半功能 性版本。尽管 Linux 已经启动并正在运行,您仍可以运行 GRUB 并执行某些任务,而且其界面与使用 GRUB 引导盘或将 GRUB 安装到硬盘 MBR 时看到的界面(即GRUB控制台)完全相同。

    在 grub> 提示符处,输入:

    grub> root (fd0)
    grub> setup (fd0)
    grub> quit

    现在,引导盘完成了。

    2. 安装根文件系统:

    一套linux系统要正常启动,根文件系统要包括下列文件夹:

    /bin /etc /proc /tmp /var /dev /mnt

    要包括下列基本的设备文件:

    /dev/console /dev/fd0 /dev/null /dev/ram0 /dev/tty /dev/tty0

    要包括下列配置文件:

    /etc/rc.d/inittab /etc/rc.d/rc.sysinit /etc/fstab

    要实现基本的功能,还要包括一些常用工具:

    如:sh,ls,cd,cat……

    其中,前面三个部分不要多少空间的,但是常用工具会占用很多空间,要是用原来系统中的这些命令,就是全部用静态编译,不是用动态连接库,大概有 2MB~3MB,放不进软盘。网络上解决 的方案是使用BusyBox工具。具体可以到官方网 站:www.busybox.net 看看。

    下载 BusyBox工具的源代码,编译:

    注意:

    (1) 译的时候要静态编译,修改 Makefile 中的 DOSTATIC 参数,从false 改为 true,这样,编译出来的代码就不要依赖glibc了。

    (2) 因为我们用的是 BusyBox 上的 init,与一般所使用的 init 不太一样,会先执行 /etc/init.d/rcS 而非 /etc/rc.d/rc.sysinit,为了做出来的 FloppyLinux 架构与 Redhat 的架构一样,所以修改了 BusyBox 中的 init.c底下是修到的部分内容∶

    #ifndef INIT_SCRIPT
    #define INIT_SRCIPT /"/etc/rc.d/rc.sysinit/"
    #endif

    具体操作如下:

    (1) 官方网站上下载BusyBox的最新版本:busybox-0.60.5.tar.gz解开,按照上面的注意点修改源代码

    (2) 运行下列命令:

    #make
    #make install

    (3) 译好的可势行文件放在 ./_install 文件夹里的。

    #cp ./_install /tmp/floppy-linux -r

    (4) 动建立其它的文件或文件夹:


    #cd /tmp/floppy-linux
    # mkdir dev etc etc/rc.d proc mnt tmp var
    # chmod 755 dev etc etc/rc.d bin mnt tmp var
    # chmod 555 proc
    # cd dev
    # mknod tty c 5 0
    # mknod console c 5 1
    # chmod 666 tty console
    # mknod tty0 c 4 0
    # chmod 666 tty0
    # mknod ram0 b 1 0
    # chmod 600 ram0
    # mknod fd0 b 2 0
    # chmod 600 fd0
    # mknod null c 1 3
    # chmod 666 null



    (5) 建启动配置文件:(inittab,rc.sysinit,fstab)

    initab:
    ::sysinit:/etc/rc.d/rc.sysinit
    ::askfirst:/bin/sh
    rc.sysinit:
    #!/bin/sh
    mount -a
    # chmod 755 rc.sysinit
    fstab:
    proc /proc proc defaults 0 0

    (6) 作Ramdisk的镜像文件:


    # dd if=/dev/zero of=/tmp/initrd bs=1k count=4096
    # losetup /dev/loop0 /tmp/initrd
    # mke2fs -m 0 /dev/loop0>
    # mount -t ext2 /dev/loop0 /mnt
    # cp -r /tmp/floppy-linux/* /mnt
    # umount /mnt
    # losetup -d /dev/loop0
    # dd if=/tmp/initrd | gzip -9 > /tmp/initrd.gz
    # rm -f /tmp/initrd
    # sync



    3.编译内核:

    这部分内容不详细讲述,主要是去掉了一些不需要的选项,减小内核,编译出来的内核是725920Byte。里面包含了必要的网卡驱动 和网络协议栈。

    4.整合启动盘

    现在所用到了的东西全部搞好了,下面就是整合一下:

    全部文件(文件夹)如下:

    /lost+found/
    /boot/
    /boot/grub/
    /boot/grub/stage1 =========èGrub启动时用到的两个文件
    /boot/grub/stage2
    /boot/grub/menu.lst =========èGrub的配置文件指向grub.conf
    /boot/grub/grub.conf
    /boot/kernel =============è内核
    /initrd.gz ===============è内存镜像文件

    这样这张软盘就能启动一套Linux系统了,占用1.213MB。
    以下是关于grub的一些介绍,希望对大家有用!
    GRUB 是引导装入器(boot loader) -- 它负责装入内核并引导 linux 系统。GRUB 还可以引导其它操作系统 ,如 FreeBSD、NetBSD、OpenBSD、GNU HURD 和 DOS,以及 Windows 95、98、NT 和 2000。尽管引导操作系统看上去是件平凡且琐碎的任务,但它实际上很重要。如果引导装入器不能很好地完成工作或者不具有弹性,那么就可能锁住系统,而无 法引导计算器。另外,好的引导装入器可以给您灵活性,让您可以在计算器上安装多个操作系统,而不必处理不必要的麻烦。
      GRUB 是一个很棒的boot loader。它有许多功能,可以使引导过程变得非常可靠。例如,它可以直接从 FAT、minix、FFS、ext2 或 ReiserFS 分区读取 linux 内核。这就意味着无论怎样它总能找到内核。另外,GRUB 有一个特殊的交互式控制台方式, 可以让您手工装入内核并选择引导分区。这个功能是无价的:假设 GRUB 菜单配置不正确,但仍可以引导系统。哦,对了 -- GRUB 还有一个彩色引导菜单。

    GRUB菜单
      先来看一个例子,这是位于/boot/grub/目录下的menu.lst文件。
      此文件将在开机 是产生一个菜单,包含有Debian linux,Windows2000,RedHat linux和 Mandrake linux,共四个选择项。我一共分了8个区,一个fat16(0x6),一个ntfs(0x7),三个ext2fs分区(0x83),一个swap分区 (0x82)。ntfs用来装win2000, 三个ext2fs装了三个linux,c盘fat16分区没有装任何东西。

      ###########################################
      # 一个GRUB configure 的例子 #
      ###########################################

      timeout 10
      default 2

      # --> Debian linux <--
      title Debian linux
      root (hd0,2)
      kernel /boot/vmlinuz-2.2.18 root=/dev/hda3 ro
      initrd /boot/initrd-2.2.18.gz
      # --> Debian END <--

      # --> Windows 菜单选项 <--
      title Windows2000
      root (hd0,0)
      chainloader +1
      # --> Winddows 结束 <--

      # --> RedHat linux 菜单选项 <--
      title RedHat linux
      root (hd0,
      chainloader +1 # 在硬盘主引导分区装了lilo,所以也用了chainloader。
      # --> RedHat linux 结束 <--

      # --> Mandrake linux 菜单选项 <--
      title Mandrake linux
      root (hd0,5)
      kernel /boot/vmlinuz-2.4.3-20mdk root=/dev/hda6 ro
      initrd /boot/initrd-2.4.3-20mdk.img
      # --> Mandrake linux 结束 <--

      以符号井〝#〝开头的行表示被注释掉,没有任何意义。

      timeout表示默认等待的时间,这儿是10秒钟。超过10秒,用户还没有作出选择的话, 系统将自动选择默认的操作系统。
      默认的操作系统就是由default控制的。default后加一个数字n,表明是第n+1个。 需要注意的是,GRUB中,计数是从0开始的,第一个硬盘是hd0,第一个软驱是fd0,等等。所以, default 2 表示默认的操作系统在这儿是 Redhat linux。
      接下来,正如你所想象的,title表示的是“Debian linux”菜单项。 root (hd0,2)表示第一个硬盘,第三个分区。这儿的root 于linux的root分区及其不同,此root非彼root也!
      在 linux 中,当谈到 /"root/" 文件系统时,通常是指主 Linux 分区。但是,GRUB 有它自己的 root 分区定义。GRUB 的 root 分区是保存 linux 内核的分区。这可能是您的正式 root 文件系统,也可能不是。我们讨论的是 GRUB,需要指定 GRUB 的 root 分区。进入 root 分区时,GRUB 将把这个分区安装成只读型,这样就可以从该分区中装入 linux 内核。 GRUB 的一个很“酷”的功能是它可以读取本机的 FAT、FFS、minix、ext2 和 ReiserFS 分区。
      到目前为止,您可能会感到一点疑惑,因为 GRUB所使用的硬盘/分区命名约定与linux使用的命名约定不同。在 linux 中,第一个硬盘的第五个分区称作/"hda5/"。而 GRUB 把这个分区称作/"(hd0,4)/"。GRUB 对硬盘和分区的编号都是从 0 开始计算。另外,硬盘和分区都用逗号分隔,整个表达式用括号括起。现在,可以发现如果要引导 linux 硬盘 hda5,应输入/"root (hd0,4)/"。
      知道了内核在哪儿,还要具体指出哪个文件是内核文件,这就是kernel的工作。
      kernel /boot/vmlinuz-2.2.18 root=/dev/hda3 ro
    说明/boot/vmlinuz-2.2.18 就是要加载的内核。后面的都是传递给内核的参数。
    root=/dev/hda3就是linux的硬盘分区表示法,ro是以readonly的意思。
      initrd用来初始的linux image,并设置相应的参数。
      下面看一看windows的定义段。
    这里,我添加了一项来引导 Windows2000。要完成此操作,GRUB 使用了“链式装入器” (chainloader)。链式装入器从分区 (hd0,0) 的引导记录中装入 win2000自己的引导装入器,然后引导它。这就是这种技术 叫做链式装入的原因 -- 它创建了一个从引导装入器到另一个的链。这种链式装入技术可以用于引导任何版本的 DOS 或 Windows。

      我的RedHat linux在硬盘主引导分区装了lilo,所以也用了chainloader。
      GRUB的配置文件要简单就这么简单,如果你要更个性化一点,试一试,把 “color light-gray/blue ”加在default语句的下面,下一次激活GRUB时,看看有什么变化,再试一试“color light-blue/red/",惊喜吗? 有趣吧!


    GRUB的交互性
      GRUB 最好的优点之一就是其强健的设计 -- 在不断使用它时请别忘了这点。 如果更新内核或更改它在磁盘上的位置,不必重新安装 GRUB。事实上,如有必要,只要更新 menu.lst 文件即可,一切将保持正常。
      只有少数情况下,才需要将 GRUB 引导装入器重新安装到引导记录。首先,如果更改 GRUB root 分区的分区类型(例如,从 ext2 改成 ReiserFS),则需要重新安装。或者, 如果更新 /boot/grub 中的 stage1 和 stage2 文件,由于它们来自更新版本的 GRUB, 很有可能要重新安装引导装入器。其它情况下,可以不必理睬!
      GRUB的最大的特点就是交互性特别强。在开机时,按一下“c”,将进入GRUB 控制台。显示如下:
      GRUB version 0.5.96.1 (640K lower / 3072K upper memory)

      [ Minimal BASH-like line editing is supported. For the first word, TAB   lists possible command completions. Anywhere else TAB lists the possible   completions of a device/filename. ]

      grub>

      欢迎使用 GRUB 控制台。现在,再研究命令:
      我将通过GRUB 控制台绕过lilo来激活RedHat linux,

      grub> root (h

      现在,按一次 Tab 键。如果系统中有多个硬盘,GRUB 将显示可能完成的列表,从 /"hd0/" 开始。如果只有一个硬盘,GRUB 将插入 /"hd0,/"。如果有多个硬盘,继续进行,在 (/"hd2/") 中输入名称并在名称后紧跟着输入逗号,但不要按 Enter 键。部分完成的 root 命令看起来如下:
      grub> root (hd0,
      现在,继续操作,再按一次 Tab 键。GRUB 将显示特定硬盘上所有分区的列表,以及它们的文件系统类型。在我的系统中,按 Tab 键时得到以下列表:
      grub> root (hd0, (tab,按tab一下键)
      Possible partitions are:
      Partition num: 0, Filesystem type is fat, partition type 0x6
      Partition num: 2, Filesystem type is ext2fs, partition type 0x83
      Partition num: 4, Filesystem type unknown, partition type 0x7
      Partition num: 5, Filesystem type is ext2fs, partition type 0x83
      Partition num: 6, Filesystem type is fat, partition type 0xb
      Partition num: 7, Filesystem type is fat, partition type 0xb
      Partition num: 8, Filesystem type is ext2fs, partition type 0x83
      Partition num: 9, Filesystem type unknown, partition type 0x82
      如您所见,GRUB 的交互式硬盘和分区名称实现功能非常有条理。这些,只需要好好理解 GRUB 新奇的硬盘和分区命名语法,然后就可以继续操作了
      grub> root (hd0,
    现在已安装了 root 文件系统,到装入内核的时候了
      grub> kernel /boot/vmlinuz-2.4.2 root=/dev/hda5 ro
    [linux-bzImage, setup=0x1200, size=0xe1a30]

      您已经安装了 root 文件系统并装入了内核。现在,可以引导了。只要输入/"boot/", linux 引导过程就将开始。是不是很cool啊,GRUB的menu.lst更像一个linux 下的脚本程序。

    GRUB激活盘
      要制作引导盘,需执行一些简单的步骤。首先,在新的软盘上创建 ext2 文件系统。然后,将其安装,并将一些 GRUB 文件复制到该文件系统,最后运行 /"grub/" 程序,它将负责设置软盘的引导扇区。准备好了吗?

      将一张空盘插入 1.44MB 软驱,输入:
      # mke2fs /dev/fd0
      创建了 ext2 文件系统后,需要安装该文件系统:
      # mount /dev/fd0 /mnt/floppy
       现在,需要创建一些目录,并将一些关键文件(原先安装 GRUB 时已安装了这些文件) 复制到软盘:
      # mkdir /mnt/floppy/boot
      # mkdir /mnt/floppy/boot/grub
      # cp /boot/grub/stage1 /mnt/floppy/boot/grub
      # cp /boot/grub/stage2 /mnt/floppy/boot/grub
      再有一个步骤,就能得到可用的引导盘。

      在linux bash中,从 root 用户运行“grub”,该程序非常有趣并值得注意,因为它实际上是 GRUB 引导装入器的半功能性版本。尽管 linux 已经激活并正在运行,您仍可以运行 GRUB 并执行某些任务,而且其界面与使用 GRUB 引导盘或将 GRUB 安装到硬盘 MBR 时看到的界面(即GRUB控制台)完全相同。
      在 grub> 提示符处,输入:
      grub> root (fd0)
      grub> setup (fd0)
      grub> quit
      现在,引导盘完成了。

      如果要把GRUB装到硬盘上,也很容易。这个过程几乎与引导盘安装过程一样。首先,需要决定哪个硬盘分区将成为 root GRUB 分区。在这个分区上,创建 /boot/grub 目录,并将 stage1 和 stage2 文件复制到该目录中,可以通过重新引导系统并使用引导盘, 或者使用驻留版本的 GRUB 来执行后一步操作。在这两种情况下,激活 GRUB,并用 root 命令指定root 分区。例如,如果将 stage1 和 stage2 文件复制到 hda5 的 /boot/grub 目录中,应输入 /"root (hd0,4)/"。接着,决定在哪里安装 GRUB -- 在硬盘的 MBR,或者如果与 GRUB一起使用另一个“主”引导装入器,则安装在特定分区的引导记录中。如果安装到 MBR,则可以指定整个磁盘而不必指定分区,如下(对于 hda):
      grub> setup (hd0)
      如果要将 GRUB 安装到 /dev/hda5 的引导记录中,应输入:
      grub> setup (hd0,4)
      现在,已安装 GRUB。引导系统时,应该立即以GRUB的控制台方式结束(如果安装到MBR)。现在,应创建引导菜单,这样就不必在每次引导系统时都输入那些命令。
    LILO(linux Loader)是Linux自带的一个优秀的引导管理器,使用它可以很方便地引导一台机器上的多个操作系统。与其他常用的引导加载程序相比,LILO引导 方式显得更具有艺术性,对其深入的理解,将有助于我们方便地处理多操作系统、网络引导、大硬盘及大内存等诸多棘手的问题。
      通常我们谈到LILO,会涉及到两个方面——LILO引导程序和LILO安装命令/sbin/lilo。为了不至于混淆这两个概念,本文将用LILO 表示LILO引导程序,而lilo表示/sbin/lilo。

      一般地,LILO使用一个文本文件/etc/lilo.conf作为其配置文件。lilo读取lilo.conf,按照其中的参数将特定的LILO写 入系统引导区。任何时候,修改了/etc/lilo.conf,都必须重新运行lilo命令,以保证LILO正常运行。lilo.conf使用的配置参数 很多,配置起来也相当复杂。下面以RedHat linux为例作一些初步探讨,RedHat的lilo程序包版本为0.20,别的Linux发行版本可能会有所出入,但不会太大。

      lilo.conf文件中的配置参数分为两部分,一部分是全局参数,另一部分是引导映像参数。与linux系统其他的配置文件一样,“#”号后的一行 文字表示注释。

    一、LILO的全局参数

      全局参数是全程有效的,它可以出现在文件lilo.conf中的任何地方。以下是具体的参数项:
      1.backup=backup-file
      在装入LILO之前将原先的引导区备份到backup-file,而不是RedHat 缺省的/boot/boot.NNNN。也可以备份到一个设备上,如: /dev/null。注意:如果原先已有一个同名文件,该参数将被忽略。我们可通过这个备份恢复原先的引导扇区:
      dd if=/boot/boot.NNNN of=/dev/hda bs=446 count=1
      原先的MBR。(注:虽然boot.NNNN有512字节,但只能恢复前446字节到MBR。)
      2.boot=boot-device
      指定一个用于安装LILO的设备。通常LILO可安装在如下几个地方:
      MBR:第一个硬盘的主引导区, 对应于/dev/hda、/dev/sda等。
      Root:linux根分区的超级块(Super block), 对应于/dev/hda1、/dev/hda2、/dev/hda5、/dev/sda1、/dev/sda5等。
      Floppy ILO安装在软盘上,对应于/dev/fd0。
      不指定时,lilo缺省安装在根分区超级块上。
      3.compact
      该参数用于优化LILO,产生一个更小的“map”文件。如果在软盘上安装LILO,强烈推荐 使用此参数。
      4.default=name
      指定缺省引导的操作系统。如default=dos 表示将label为DOS的系统作为缺省引导的操作系统。如不指定该参数,排在lilo.conf中的第一个操作系统将作为缺省操作系统。
      5.delay=tsecs
      在没有指定“prompt” 参数时,LILO将立即引导缺省的操作系统,“delay”参数在这之间插入一段延时,单位是1/10秒。
      6.disk=device-name
      为某些非标准硬盘定义参数。其内部还包括有几个可选的子参数。
      bios=〈bios_device_code〉:  设备号。十六进制数0x80表示第一硬盘;0x81表示第二硬盘,依此类推。
      sectors=〈sectors〉:硬盘扇区数。
      heads=〈heads〉:硬盘磁头数。
      cylinders=〈cylinders〉:硬盘柱面数。受系统BIOS 限制,柱面数必须在1024以内。
      partition=〈partition_device〉:用于物理定位特殊硬盘上的分区,有一个子参数start。
      start=〈partition_offset〉:每一分区的起始扇区。
      例如:
      disk = /dev/sda
      bios=0x80
      #指定SCSI硬盘为第一硬盘
       sectors = 32
       heads = 64
       cylinders=632
      #硬盘参数为632/64/32
      partition=/dev/sda1
      start=2048
      #第一分区起始扇区为2048
      partition = /dev/sda2
      start=204800
      #第二分区起始扇区为204800
       partition = /dev/sda3
        start = 500000
       partition = /dev/sda4
        start = 900000
      当机器上有两块硬盘,一块为SCSI硬盘,另一块为IDE硬盘时,LILO很有可能无法自动识别它们的主、从顺序,这时可进行如下设置:
      disk = /dev/sda
       bios = 0x80
      disk = /dev/hda
       bios = 0x81
      #SCSI硬盘为主硬盘,IDE硬盘为从硬盘
      该参数是为linux无法识别的硬盘准备的,一般Linux可以正确识别和使用大多数硬盘,除非最坏的情况,否则不用设置它。
      7.force-backup=backup-file
      类似“backup”参数,但是将覆盖原有的同名文件。
      8.ignore-table
      通知lilo忽略无效的硬盘分区表。
      9.install=boot-sector
      LILO实际上包含有几个部分,而这几部分都存放在/boot/boot.b文件中。如果忽略“install”参数,则lilo认为 install=/boot/boot.b。
      10.linear
      产生用于替换硬盘sector/head/cylinder地址(硬盘几何参数)的linear扇区地址。linear地址在运行时产生并且不依赖于 硬盘几何参数。某些SCSI硬盘和一些以LBA方式使用的IDE硬盘可能会需要使用这个参数。注意,在将LILO安装到软盘上时不能使用“linear” 参数。
      11.lock
      出现LILO提示后立即按最近一次的引导映像启动计算机。也就是说,当我们在lilo.conf中加入了该参数,然后运行lilo安装LILO,再重 新启动计算机,这时LILO会提示我们选择引导哪一种操作系统,这一选择将被LILO记录下来,即“锁定”,下次启动计算机时,LILO将忽略 “delay”、“prompt”等参数及键盘输入而直接跳转到其“锁定”的操作系统。
      12.map=map-file
      指定map文件。 没有本项时缺省使用/boot/map,每次执行lilo命令都会产生一个新的map文件。
      13.message=message-file
      该命令用于指定一个包含注释信息的文件,该文件将在系统打印出字符串“LILO”之前显示。如果在LILO启动时想获取较多的信息,可以编辑一个文 件,再使用该命令就可以了。文件中如果包含有ASCII码为0xFF的字符(Ctrl+L)则表示清屏。注意,文件的大小不能超过65535个字节。每次 文件改变之后,都必须重新运行lilo命令重建map文件,以保证其正常显示。
      14.optional
      当用于启动的引导映像不存在时,该参数使lilo忽略它。这对用于测试一个不长期存在的linux核心是有用的。
      15.password=password
      为LILO设置口令保护,每次重新启动计算机提示用户输入口令。设置了口令后,建议将lilo.conf的文件属性改为600,以免让非root用户 看到口令。
      16.prompt
      给出“boot:”提示,强制LILO等待用户的键盘输入,按下回车键则立即引导默认的操作系统,而按下Tab键则打印可供选择的操作系统。当 “prompt”被设置而“timeout”没有被设置时,系统会一直处于等待状态而不引导任何操作系统。不设置该参数时,LILO不给出“boot:” 提示而直接引导默认操作系统,除非用户按下了Shift、Ctrl、Alt三键中的任何一个。大多数情况下,如果你的硬盘上有多个操作系统,建议使用参 数,它留给用户一个选择的余地。
      17.restricted
      与“password”联用,使“password”仅作用于在LILO提示后有命令行输入的时候。
      18.serial=parameters
      使用串行口控制。这将初始化指定的串口,并将使引导管理器能接受来自串口的输入。从串口发送一个中断信号相当于从控制台键盘上按下Shift键,它同 样会被LILO捕捉到。如果不能保证来自串口的访问和控制台一样安全,比方说有一个modem连在串口上,建议为每个引导映像加上口令保护 (password)。参数串有如下语法:
      〈port〉[,〈bps〉[〈parity〉[〈bits〉]]]
      〈port〉:数字表示的串口号,0表示COM1,其余类推。所有四个串口都可被使用。
      〈bps〉:串口速率,支持110、 150、300、600、1200、2400、4800和 9600 bps,缺省值为2400bps。
      〈parity〉:设置串口校验。一般情况下,LILO忽略奇偶校验。n表示无校验,e 表示偶校验,o 表示奇校验。
      〈bits〉:字符位数,只能取7或8,缺省值是8。当有奇偶校验时只能取7。
      如果设置了“serial”,即使没有设置“delay”,系统也会将“delay”项的值自动增加20。
      19.timeout=tsecs
      设置等待键盘输入的时长,单位是0.1秒。超过这段时间没有输入则为超时,系统将自动引导缺省的操作系统。如果不设置本参数,缺省的超时时间长度为无 穷大。

    二、引导映像参数

      引导映像参数作用于每一个引导映像区。如果某一引导映像参数(例如:password)与全局参数的定义相抵触,则以该引导映像参数的定义为准,但仅 限于该引导映像区。以下是具体参数项:
      image=pathname
      设置包含linux核心引导映像的文件或设备。
      other=pathname
      设置包含非linux操作系统,如DOS、SCO UNIX、Windows 95等系统引导映像的文件或设备。
      range=start-end
      如果“image”参数被设置为一个设备,则linux核心引导映像的存放范围必须被设置。
      image = /dev/fd0
      range = 1-512
      # linux核心引导映像存放在软盘上的第一至512扇区
      label=name
      通过此参数来标识当前操作系统,即操作系统名。用户可通过在LILO提示后输入“标识”来决定引导哪一个操作系统。
      alias=name
      给当前操作系统起一别名。
      lock
      类似同名全局参数。
      optional
      类似同名全局参数。
      password=password
      类似同名全局参数。
      restricted
      类似同名全局参数。
      以下两个参数项用于非linux操作系统:
      loader=chain-loader
      如果要引导第二块硬盘上的非linux操作系统或将LILO安装到软盘,这个参数是必需的。不指定时,缺省值是/boot/chain.b。如启动第 二块硬盘上的MS-DOS或Windows 95,可定义loader=/boot/any_d.b;对于OS/2,则为loader=/boot/os2_d.b。
      作为一个特殊的功能模块,any_d.b已不合时宜,在0.20版以后的lilo程序包中已不再包含它并将其功能整合进 chain.b,os2_d.b亦有所变动。它们的功能可用如下语句代替。
      例:
       other = /dev/hdb1
         loader = /boot/any_d.b
      替换为:
       other = /dev/hdb1
         map-drive = 0x80
         to = 0x81
         map-drive = 0x81
         to = 0x80
      对于os2_d.b:
       other = /dev/hdb1
         loader = /boot/os2_d.b
      替换为:
       other = /dev/hdb1
       loader = /boot/os2_d.b
       map-drive = 0x80
           to = 0x81
       map-drive = 0x81
         to = 0x80
      map-drive=〈bios_device_code〉
      通知chain.b装入重映射软驱或硬驱的内存驻留驱动程序,使用它可以引导不同硬盘上的不同操作系统,条件只有一个, BIOS必须能访问硬盘。“map-drive”后跟有变量“TO=〈盘设备号〉”。实际上,“map-drive”起到了“软”交换两个软驱或硬驱主、 从顺序的作用,避免了手工接线的麻烦。
      例:交换软驱
         map-drive = 0
         to = 1
         map-drive = 1
         to = 0
      交换硬驱(参看loader参数例)
      table=device
      指定包含非linux系统分区的主设备。举例来说,如果Windows 95在第一个IDE硬盘的第一个基本分区上,即/dev/hda1上,那么必须定义table=/dev/hda 。

    三、核心参数
      如果LILO引导的是linux系统,我们可用下面命令传递一些参数给Linux核心。除“literal”之外,它们也可用于全局参数区。
      append=string
      append传递一个特殊硬件的参数串string给linux系统的核心。它常用来配置一些Linux不能正确测试到的硬件设备。例如:
      append = /"hd=64,32,202/"
      通知linux核心,硬盘参数为64柱面、32磁头、202扇区。具体的参数串设置可参看/usr/doc/HOWTO/BootPrompt- HOWTO文件。
      literal=string
      类似于“append”,但它将撤消所有的其它核心参数(比如设置了root设备)。因为“literal”会不分青红皂白地撤消一些必需的、重要的 参数,所以不能将它设置在全局参数区。
      ramdisk=size
      指定RAM盘的大小。size为零时不建立RAM盘。忽略此参数时,RAM盘大小由linux核心引导映像决定。
      read-only
      通知LILO以只读方式载入根文件系统。通常我们在检查根文件系统时需要将根文件系统以只读方式载入。linux系统在每次启动时也会将根文件系统以 只读方式载入,待例行的文件系统检查后再将其重新载入为读写方式。
      read-write
      通知LILO以读写方式载入根文件系统。
      root=root-device
      指定被安装根文件系统硬盘分区设备。
      vga=mode
      指定引导linux系统时的VGA模式。有以下取值:
      normal:常规80×25文本模式
      extended (or ext): 80×50文本模式
      ask: 引导时询问用户使用哪一种VGA模式,这时敲回车键将显示一个可分配的VGA模式表。
      如果不指定VGA模式,系统将缺省地使用包含在系统核心里的VGA模式值。

    四、lilo.conf配置实例
      有了这些基础知识,我们可以很容易地按照自己的意图配置LILO。请看一个lilo.conf文件的例子:
      boot=/dev/hda         #将LILO安装在MBR。LILO作为主引导管理器
      message=/boot/message     #注释为/boot/message
      compact             #产生一个更小的“map”文件
      map=/boot/map         #指定“map”文件为/boot/map
      install=/boot/boot.b
      password=zhoudi         #设置口令
      vga=normal           #80x25文本模式
      linear             #使用“linear”地址
      prompt             #提示用户键盘输入
      timeout=50           #超时时长为5秒
      default=dos          #缺省引导label为dos的操作系统
      #设定linux
      image=/boot/vmlinuz-2.0.34-1
      #设置linux核心引导映像
       label=linux         #标识为linux
       root=/dev/hda1       #设置根文件系统
       read-only          #LILO以只读方式载入根文件系统
      #设定MS-DOS或Windows 95
      other=/dev/hda2         #DOS分区为第一个IDE硬盘的第二分区
       label=dos          #标识为dos
       table=/dev/hda       #主设备为第一个IDE硬盘
      #设定SCO UNIX
      注意:SCO分区必须设为活动(active)分区并将LILO安装在MBR上。
      other=/dev/hda3
       label=sco
       table=/dev/hda
      这个例子中,LILO是作为主引导管理器来管理机器上所有操作系统的。LILO也可作为二级引导管理器,这只要将“boot”参数改为根分区就可做 到。例如:
      boot=/dev/hda1
      以这种方式使用LILO时,linux根分区必须用DOS或Linux的fdisk程序将其设置为活动分区,并且这种方式只对硬盘主分区(不是扩展或 逻辑分区)有效。
      LILO还可以启动第二个以上的操作系统。在我的机器上有两块希捷硬盘,一块硬盘为8.4GB,另一块为1.2GB,都以LBA模式接在主IDE口 上。8.4GB跳线为主盘,1.2GB跳线为从盘,linux核心很容易地就将它们辨认出来并能正常使用,1.2GB的硬盘上安装了MS-DOS 6.22。笔者是这样设置lilo.conf的:
      disk=/dev/hda
       bios=0x80
      #由于IDE硬盘存在双硬盘问题,所以当启动DOS系统时,会提示“无系统盘或系统盘错!”,需修改程序如下。
      disk=/dev/hdb
       bios=0x81
      boot=/dev/hda
      map=/boot/map
      install=/boot/boot.b
      linear
      prompt
      timeout=50
      default=dos
      image=/boot/vmlinuz-2.2.11-1
       label=linux
       root=/dev/hda1
       read-only
      other=/dev/hdb1
       label=dos
       map-drive = 0x80
          to = 0x81
          map-drive = 0x81
          to = 0x80
      #交换两硬盘主、从顺序
       table=/dev/hdb
      配置好lilo.conf文件后,在root账户下执行lilo命令,新的LILO就被载入系统。上面第一个例子执行结果如下:
      #lilo
      Added linux
      Added dos*
      Added sco
      (注:带*号的表示其为缺省操作系统)

    五、LILO提示信息
      LILO在运行时会给出一些提示信息,了解它的含义对我们正确配置lilo.conf或查找硬件错误是有帮助的。
      当LILO装入它自己的时候,显示单词 “LILO”:每完成一个特定的过程显示一个字母。如果LILO在某个地方失败了,屏幕上就停留几个字母,以指示错误发生的地方。
      注意,如果磁盘发生瞬间故障,可能会在第一个字母“L”后插入一些十六进制数字(磁盘错误码)。除非LILO停在那里并不停地产生错误码流,否则并不 说明有严重问题。
      没有提示: LILO没有安装或者安装LILO的分区没有被激活。
      L〈错误码〉 : LILO的第一部分已经被装入并运行了,但它不能装入第二部分的引导程序。两位数字的错误码指示问题的类型(参见“磁盘错误码”),这种情况通常是在介质 访问失败或硬盘参数错误。
      LI: LILO第一部分正确但是第二部分执行时出错。这一般是硬盘参数有误或/boot/boot.b被移动后没有重新运行map安装程序。
      LIL: LILO第二部分开始执行,但是不能从“map”文件中读取描述符表( descriptor table)。 这通常是因介质错误或磁盘参数有误引起的。
      LIL?: LILO在错误的地方加载。原因与“LI”大致相同。
      LIL-:描述符表(descriptor table)错误。典型原因是硬盘几何参数微妙的不匹配或/boot/boot.b被移动而没有运行map安装程序。
      LILO: LILO执行正确。
      1010101010: 分区情况已经改变却没有重新安装LILO,另外,超频也可能会出这种情况。

    六、磁盘错误码
      0x00:“内部错误”。 由LILO扇区读取子程序产生。可能是因为被破坏的文件,重建map文件试试看。另一个原因也许是,当使用“linear”参数时去访问超出1024的柱 面。
      0x01:“非法命令”。这意味着LILO访问了BIOS不支持的硬盘。
      0x02:“没找到地址标记”。通常是介质问题,多试几遍看看。
      0x03:“写保护错”。 仅在写操作时出现。
      0x04:“扇区未找到”。典型的原因是硬盘参数错误。
      0x06:“激活顺序改变”。这应该是短暂的错误,再试一次。
      0x07:“无效的初始化”。BIOS没有适当地初始化硬盘,热启动一次或许有帮助。

      0x08:“DMA超出限度”。这不应当发生,重新启动。
      0x09:“DMA试图越过64kB边界”。这不应当发生,建议忽略“compact”参数。
      0x0C:“无效的介质”。这不应当发生,重新启动看看。
      0x10:“CRC错误”。检测到介质错误。建议多启动几次,运行map安装程序,把map文件从坏块写到正常的介质上。
      0x11:“ECC纠正成功”。读错误发生然后被纠正,但是LILO并不知道这个情况,终止了启动过程。
      0x20:“控制器错误”。一般不应发生。
      0x40:“定位失败”。这可能是介质问题,重新启动试试。
      0x80:“磁盘超时”。磁盘或驱动器没有准备好。介质坏了或磁盘没有转,也有可能是从软盘启动而没有关上软驱门。
      0xBB:“BIOS错误”。一般不应发生,如果反复发生,可考虑去掉“compact”参数或添加删除“linear”参数。
      如果在写操作过程中发生错误,则在错误码前有个前缀“w”。尽管写错误并不影响启动过程,但它们暗示了系统中存在某种错误,建议重新配置LILO成只 读格式(read-only)。
      LILO的配置相当复杂,读者只有在实践中不断学习、摸索,勤于思考,才能用好LILO

    展开全文
  • UOS 获取Root权限

    千次阅读 2020-06-08 21:42:58
    UOS 获取Root权限 最近关于 UOS 新闻比较多,于是上手看看,可以访问访问官网下载尝。 官网下载:https://www.chinauos.com/cooperative UOS安装之后并无ROOT权限,设置中也可尝试获取开发者模式才能获相关权限。...

    UOS 获取Root权限

    最近关于 UOS 新闻比较多,于是上手看看,可以访问官网下载尝试。
    官网下载:https://www.chinauos.com/cooperative

    UOS安装之后并无ROOT权限,设置中也可尝试获取开发者模式才能获相关权限。不过开发者模式需要注册并进行申请。
    鉴于此,下面介绍相对简便获取 root 权限的方式,开启 root 远程登陆 ssh 的方法。

    首先下载一个 CentOS boot 镜像,目前最新的是 8.1.1911,也可以从这里自己选一个 http://mirror.centos.org/centos/,根据情况自己选择下载吧,阿里源速度倒是不错。
    在这里插入图片描述
    点开你选的源下载这个几百兆的 CentOS-8.1.1911-x86_64-boot.iso 就好了,不用下载 7G 的。
    在装好的 UOS 系统设置为用刚下载的 CentOS boot 镜像启动,启动后选择
    Trubleshooting -> Rescue a CentOS Linux System
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    选择 1) Continue,然后按回车键进入文本终端。
    输入 chroot /mnt/sysimage /bin/bash,回车
    在这里插入图片描述
    在这里插入图片描述
    输入 source /etc/profile,回车

    最后用 nano, 修改 /etc/pam.d/su, /etc/pam.d/sudo 。(vim命令在此无效)
    在这里插入图片描述
    在这里插入图片描述
    注释有 deepin_security_verify 的行,保存。再启动 UOS 就可以愉快的 sudo 了。
    对了顺便说一下 UOS20SP1 自带 SSH 了,装来测试的话可选择UOS SP1。

    远程 root 登陆 ssh 简单和一般 Linux 设置一样找到 /etc/ssh/sshd_config 添加一行 PermitRootLogin yes 就好了,用 Windows 多了还是喜欢类似记事本的编辑器,这里可以用 sudo deepin-editor /etc/ssh/sshd_config,来编辑。
    在这里插入图片描述
    在这里插入图片描述
    然后重启一下 ssh 服务。可以用如下命令:
    service sshd restart
    /etc/initd.d/sshd restart
    systemctl restart sshd.service

    最后来一张远程的图片。
    在这里插入图片描述
    在这里插入图片描述

    展开全文
  •  ramdisk.img 是你make android源代码后,生成的/out/target/product/generic/root目录下经过打包压缩而成的。  system.img 是你make android源代码后,生成的/out/target/product/generic/system目录下经过打包...
  • 一加6T已于今日14点,在深圳举办了发布会。而17点开始,在北京、郑州、成都、深圳、广州,还会举办...6T的开箱评测,预计明天我就会发出,先为大家提供该机型的解锁和root教程,排除掉厂商内部人员等因素,雨哥手里...
  • Android 系统rom里面最主要的就3个文件:boot.img、system.img、userdata.img。...所以如果你要修改adb的root权限,修改boot.img对应的地方就行了。system.img中存放的是系统的各种库,系统预装的app等,userdata.i
  • bing搜索 如何去除rom包的root权限 boot.img 编辑 讨论 boot.img是Android系统启动所必须加载的文件。简单的说,boot.img包含两部分,分别为kernel...通过修改rom包永久获取root权限和所有应用调试功能ro.debuggable...
  • RK Android平台获取ROOT权限 文章目录RK Android平台获取ROOT权限2、ROOT功能配置Android11.0RK3399PRO Android9.0Android8.1Android7.1 64位Android7.1 32位Android5.1/6.0Android4.43、ROOT权限测试RE文件管理器 2...
  • 华为手机获取root权限

    2021-08-01 19:28:36
    由于本人有一个Android系统的华为手机,本篇记录如何安装Magisk,获取root权限。 Magisk GitHub地址:https://github.com/topjohnwu/Magisk/ 一、手机类型 基本配置: 型号:CAM-AL00 系统版本号:EMUI 系统...
  • 即bootloader解锁,要获取root权限,首先需要解锁bootloader。其作用是允许使用fastboot flash boot/recovery 等命令刷入自己的boot.img recover.img等文件。 具体步骤如下: 1、进入bootloader模式 有两种...
  • Android 获取ROOT权限原理解析

    万次阅读 多人点赞 2013-01-04 09:30:08
    本文介绍了android中获取root权限的方法以及原理,让大家对android玩家中常说的“越狱”有一个更深层次的认识。   二、 Root的介绍 1.  Root 的目的 可以让我们拥有掌控手机系统的权限,比如删除一些system/app...
  • Android11.0 获取ROOT权限 测试平台:RK356X Android11.0 修改步骤 需要编译userdebug版本 关闭selinux $ vim device/rockchip/common/BoardConfig.mk @@ -59,7 +59,7 @@ BOARD_BOOT_HEADER_VERSION ?= 2...
  • 小米 9 SE 获取Root 和 安装Magisk

    千次阅读 2019-09-25 20:16:48
    1、刷入第三方REC 和 Magisk 参考教程:【LR.Team】小米9SE专版TWRP中英文修改优化版_小米9 SE_MIUI论坛 ...然后获取root,这样才会在手机中安装Magisk框架。 最后,手机重启,即可成功。 注意: 小米官方是按...
  • 对于已经root过的机器,应用可以直接申请获取root权限,实现对系统文件的操作。基本是使用shell命令进行操作,首先是使用“su”切换到root用户,然后是"chmod 777 " + pkgCodePath修改该应用的读写权限,如果以上两...
  • Android adb等 获取root权限

    千次阅读 2013-03-06 11:02:06
    Android adb 获取root权限  (1) 自己编译的Android 中,adb shell后 自动获取root权限(即显示#而不是$): 方法: 修改./default.prop 把ro.secure设为0,persist.service.adb.enable设为1,adbd进程就...
  • Android如何获取Root权限

    千次阅读 2012-07-26 16:58:54
     疑问二:获取Root权限有什么用?  疑问三:如何获得Root权限?  答疑一: Root是Linux等类UNIX系统中的超级管理员用户帐户,该帐户拥有整个系统至高无上的权利,所有对象他都有可以操作的权利,所以很多黑客在...
  • Android 系统手机的rom版本里面最主要的有3个文件:boot.img、system.img、userdata....所以如果你要修改adb的root权限,则修改boot.img对应的地方就行了。system.img中存放的是系统的各种库,系统预装的app等,user
  • adb 调试获取root权限

    千次阅读 2014-08-16 17:55:48
    adb 的root 权限是在system/core/adb/adb.c 中控制。主要根据ro.secure 以及 ro.debuggable 等system property 来控制。默认即档ro.secure 为0 时,即...为此如果要永久性开启adb 的root 权限,有两种修改的方式: 1.
  • kdb模式下是可以随意修改内存的,一旦在非root账户下被触发进入,可以通过mm命令修改登陆shell的uid为0,从而获取root权限非root权限
  • Google Pixel获取root权限的方法【完整版】 由于原作者部分表述不够详尽,操作过程中遇到几个非常大的问题:解决过程太痛苦了!!一并加入教程中!! 原文地址 https://chen.sn/307.html 首先,下载安卓调试工具...
  • MTK 10.0获取root权限 最近做项目遇到的一个需求,以为和之前的版本差不多,结果差别比较大,在此记录一下。具体的修改补丁会在文章最后给出,文章只给出一些关键部分。 一. 先将seLinux关闭 --- a/system/core/init...
  • /boot 这里寄存地是启动Linux时使用地一些中心文件。 /dev dev是device(设备)地缩写。这个目录下是一切Linux地外部设备,其功用类似DOS下地.sys和Win下地.vxd。在Linux中设备和文件是用同种...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 62,451
精华内容 24,980
关键字:

修改boot获取root