【美高梅手机版4858】Framebuffer学习笔记,4系统获得root权限的措施

By admin in 美高梅手机版4858 on 2019年4月11日
  1. 预备干活:
  1. 准备干活:

1、环境搭建

转载自:

预备壹台ubuntu机器,将boot.img复制到该机器上,下载要求的工具
sudo apt-get install abootimg
git clone
cd android-simg2img
make
sudo cp simg2img /usr/bin

准备1台ubuntu机器,将boot.img复制到该机器上,下载要求的工具
sudo apt-get install abootimg
git clone
cd android-simg2img
make
sudo cp simg2img /usr/bin

1.
直接在Ubuntu上运行Framebuffer

===============================================================

  1. 解压缩boot镜像
    abootimg -x boot.img
    mkdir ramdisk
    cd ramdisk
    gunzip -c ../initrd.img | cpio -i

  2. 修改default.prop文件,使得
    ro.secure=0
    ro.debuggable=1

  3. 修改init.rc,使得
    on property:ro.debuggable=1
    start console

  1. 解压缩boot镜像
    abootimg -x boot.img
    mkdir ramdisk
    cd ramdisk
    gunzip -c ../initrd.img | cpio -i

  2. 修改default.prop文件,使得
    ro.secure=0
    ro.debuggable=1

  3. 修改init.rc,使得
    on property:ro.debuggable=1
    start console

私下认可Ubuntu是平昔进入X视窗,如若要动用Framebuffer,

在android的emulator的几点knowledge中,我对android的各样disk
images很奇异,一贯想知道怎么去know和hack这么些images,所以就有了那篇paper。

service adbd /sbin/adbd
class core
socket adbd stream 660 system system
disabled
seclabel u:r:su:s0

service adbd /sbin/adbd
class core
socket adbd stream 660 system system
disabled
seclabel u:r:su:s0

必要修改内核指导参数:

  1. 用file来查阅文件类型

    • chenjian@ubuntu8:/tmp/images$ file *
      kernel-qemu:          data
      local.img:               data
      ramdisk.img:           gzip compressed data, from Unix, last
      modified: Thu Oct 22 16:30:38 2009
      system.img:           VMS Alpha executable
      userdata.img:         VMS Alpha executable
      opl.img:                 VMS Alpha executable
    • 可知有三种,data, gzip和VMS Alpha executable;
    • 再看从avd目录取得的image文件
    • chenjian@ubuntu8:/tmpHVGA.avd$ file *
      cache.img:               VMS Alpha executable
      userdata.img:           VMS Alpha executable
      userdata-qemu.img:   data
    • 还是未有回避以上两种image类型。
    • 用表格表示如下

      文件类型 文件
      data kernel-qemu
      local.img
      userdata-qemu.img
      gzip ramdisk.img
      VMS Alpha executable system.img
      userdata.img(images目录)
      opl.img
      userdata.img(avd目录)
      cache.img
  2. ramdisk.img

    • 能够运用那些命令来查看ramdisk.img
    • root@ubuntu8:/tmp/images# gzip -d -S .img ramdisk.img 
      root@ubuntu8:/tmp/images# ls -lrt ramdisk 
      -rw-r–r– 1 root root 260608 Oct 22 01:34 ramdisk
    • 可知ramdisk.img被解压成ramdisk,
    • root@ubuntu8:/tmp/images# file ramdisk 
      ramdisk: ASCII cpio archive (SVR4 with no CRC)
    • 可见ramdisk是个cpio文件,需要用cpio来extract
    • root@ubuntu8:/tmp/images# mkdir
      ramdiskdir                                        创建ramdiskdir来装ramdisk的内容 root@ubuntu8:/tmp/images# cd
      ramdiskdir/                                          cd到该目录中 root@ubuntu8:/tmpramdiskdir# cpio -idmv
      <../ramdisk                 使用cpio来extractramdisk文件
      data
      default.prop
      dev
      init
      init.goldfish.rc
      init.rc
      proc
      sbin
      sbin/adbd
      sys
      system
      509 blocks
      root@ubuntu8:/tmpramdiskdir#
      ls                                            那正是被打包在ramdisk中的文件 data  default.prop  dev  init  init.goldfish.rc  init.rc 
      proc  sbin  sys  system
    • 运用find和file来看那些文件,发现init其实是个A奇骏M
      arch的可执行文件,那也和emulator中所说的linux是A翼虎M arch相吻合
      root@ubuntu8:/tmpramdiskdir# find . -type f|file -f –
      ./default.prop:              ASCII text
      ./init.rc:         ASCII English text
      ./init.goldfish.rc:                  ASCII English text
      ./init:      ELF 32-bit LSB
      executable, ARM, version 1 (SYSV), statically linked, stripped
      ./sbin/adbd:           ELF 32-bit LSB executable, ARM,
      version 1 (SYSV), statically linked, stripped
    • 查阅有些文件的md五

      root@ubuntu8:/tmpramdir# find . -name “init*”|xargs
      md5sum
      c3cff931e494bb4872f0ebefe1dad548  ./init.rc
      90dd60a3458cce84901d12b362880339  ./init.goldfish.rc
      7a950533c62fe91300a5b31b12a38084  ./init

    • ls –lrt 那个文件

      root@ubuntu8:/tmpramdir# find . |grep init|xargs ls
      -lrt
      -rwxr-x— 1 root root  11875 Jan 
      1  1970 ./init.rc
      -rwxr-x— 1 root root   2138 Jan  1  1970 ./init.goldfish.rc
      -rwxr-x— 1 root root 127548 Jan  1  1970 ./init

  3. data
    data文件共有这么多少个,kernel-qemu,local.img和userdata-qemu.img。
    什么样是data文件?怎么着选取那一个文件?大家面临着么多个难题

  4. VMS Alpha executable
    VMS Alpah
    executable共有这么多少个system.img,userdata.img,opl.img,userdata.img和cache.img。
    哪些是VMS Alpha
    executable?怎么着利用这一个文件?大家面临那样八个难点。。。
  5. adb shell(1.5版本)
    选用这些命令传说能够在emulator起来之后进入到android
    os的shell中,大家来看望、

    • D:Program FilesOPhoneSDK_1.5.betatools>adb shell
      #【美高梅手机版4858】Framebuffer学习笔记,4系统获得root权限的措施。 pwd
      pwd
      /
    • # ls -l
      ls -l
      lrwxrwxrwx root     root              2010-01-31 15:03 preload
      -> /system/preload
      drwxr-xr-x root     root              2010-01-31 15:03 Linux
      lrwxrwxrwx root     root              2010-01-31 15:03 bin ->
      /opl/telephony/bin
      lrwxrwxrwx root     root              2010-01-31 15:03 usr ->
      /opl/telephony/usr
      lrwxrwxrwx root     root              2010-01-31 15:03 lib ->
      /opl/telephony/lib
      drwxrwxrwt root     root              2010-01-31 15:05 tmp
      drwxrwxrwt root     root              2010-01-31 15:05
      sqlite_stmt_journals
      drwxrwx— system   cache             2009-12-20 10:11 cache
      drwxr-xr-x system   system            2009-10-10 13:11 opl
      drwxrwxrwx system   system            2009-10-24 01:48 local
      d——— system   system            2010-01-31 15:03 sdcard
      drwxr-xr-x root     root              2010-01-31 15:03 d
      lrwxrwxrwx root     root              2010-01-31 15:03 etc ->
      /system/etc
      drwxr-xr-x root     root              2009-10-22 16:20 system
      drwxr-xr-x root     root              1970-01-01 08:00 sys
      drwxr-x— root     root              1970-01-01 08:00 sbin
      dr-xr-xr-x root     root              1970-01-01 08:00 proc
      -rwxr-x— root     root       
      11875 1970-01-01 08:00 init.rc
      -rwxr-x— root     root         2138 1970-01-01 08:00
      init.goldfish.rc
      -rwxr-x— root     root       127548 1970-01-01 08:00
      init

      -rw-r–r– root     root          118 1970-01-01 08:00
      default.prop
      drwxrwx–x system   system            2009-12-20 10:11 data
      drwx—— root     root              1970-01-01 08:00 root
      drwxr-xr-x root     root              2010-01-31 15:04 dev
    • 果真,能够run一些linux下的为主命令,如ls,pwd等,申明了我们确实是获取了3个linux
      shell
    • 除此以外黄颜色展现的公文和大家在ramdisk中看出的文本就像大小相同,暗示它们是1律。
    • run mount to see有这个文件系统被mount了

      # mount
      mount
      rootfs / rootfs ro 0 0
      tmpfs /dev tmpfs rw,mode=755 0 0
      devpts /dev/pts devpts rw,mode=600 0 0
      proc /proc proc rw 0 0
      sysfs /sys sysfs rw 0 0
      tmpfs /sqlite_stmt_journals tmpfs rw,size=4096k 0 0
      tmpfs /tmp tmpfs rw 0 0
      /dev/block/mtdblock0 /system yaffs2 rw 0
      0                                     
      /dev/block/mtdblock4 /opl yaffs2 rw 0 0
      /dev/block/mtdblock1 /data yaffs2 rw,nosuid,nodev 0 0
      /dev/block/mtdblock3 /local yaffs2 rw,nosuid,nodev 0 0
      /dev/block/mtdblock2 /cache yaffs2 rw,nosuid,nodev 0 0

    • 笔者们看见了system,opl,data,local和cache;恩,这几个名字和极度表格里的data/VMS
      Alpha Executable就像有个别重合
      /system,/opl和/cache是VMS Alpha
      Executable的system.img,opl.img和cache.img转换而来
      /local是data的local.img转换而来
      /data嘛,就不太好判断,不驾驭和userdata.img和userdata-qemu.img有什么样关联没?
      但最少大家领略能够查看/system来明白system
      image包罗哪些东西了吧。。。,比如/system/framework正是android的framework啦
      也得以领略能够查看/cache来精通如何是cache
      image的内蕴了吧。。。
      对于local image总之。。。

    • 其余,adb
      shell提供的command有限,比如未有zcat,cp,uname和busybox等,有未有办法能将这几个命令参与进来吧? 到那边下载busybox,,然后遵照提醒将busybox
      push至/data/busybox目录,install后即可运转具有的busybox
      applet。比如:

      # /data/busybox/zcat /proc/config.gz|/data/busybox/more
      /data/busybox/zcat /proc/config.gz|/data/busybox/more
      #
      # Automatically generated make config: don’t edit
      # Linux kernel version: 2.6.25
      # Mon Nov 10 05:02:15 2008
      于是我们就能明白一.5的Android用的linux kernel是2.陆.2五本子的。。。

  6. kernel在哪里?

  7. 什么是yaffs2? 
    ok,这又是壹种新的文件系统,designed specially for NAND
    chips;YAFFS二是YAFFS的第叁版,为了适应新的NAND
    chips,这一个新chip的page size有204八bytes,plus 6四bytes的spare
    areas;老版本的NAND chips的page是512bytes,plus 1六bytes spare area。
  8. 这个disk images从何而来?
    从那篇小说编译Android1.5里是还是不是取得部分启迪?
    在编写翻译android1.5后,其实大家能取得二个img文件,如同能够下断言,那多少个image是在编写翻译android的进度中取得的。有关生成他们的经过又是此外二个话题,估计得去读makefile了。

    root@ubuntu8:/ophone/android-1.5# find . -name *.img
    ./out/target/product/generic/obj/PACKAGING/systemimage_unopt_intermediates/system.img
    ./out/target/product/generic/userdata.img
    ./out/target/product/generic/system.img
    美高梅手机版4858 ,./out/target/product/generic/ramdisk.img
    BTW, out目录是在编写翻译进度中产生的目录,别的目录则是source目录

  9. 什么增大/data目录的高低?
    /data目录缺省大小仅有6肆M,那致使在调节有些大apk时,emulator会报告insufficient
    storage,为了缓解这些难点,能够利用emulator的-partition-size来钦赐/data目录的轻重缓急;从下列命令能够观察userdata.img被map成mtd一,而mtd一又被mount成/data

    # mount
    mount
    rootfs / rootfs ro 0 0
    tmpfs /dev tmpfs rw,mode=755 0 0
    devpts /dev/pts devpts rw,mode=600 0 0
    proc /proc proc rw 0 0
    sysfs /sys sysfs rw 0 0
    tmpfs /sqlite_stmt_journals tmpfs rw,size=4096k 0 0
    none /dev/cpuctl cgroup rw,cpu 0 0
    /dev/block/mtdblock0 /system yaffs2 ro 0 0
    /dev/block/mtdblock1
    /data yaffs2 rw,nosuid,nodev 0 0
    /dev/block/mtdblock2 /cache yaffs2 rw,nosuid,nodev 0 0

    # cat /proc/mtd
    cat /proc/mtd
    dev:    size   erasesize  name
    mtd0: 07c20000 00020000 “system”
    mtd1: 07c20000 00020000
    “userdata”

    mtd2: 04000000 00020000 “cache”

on post-fs
# once everything is setup, no need to modify /
mount rootfs rootfs / rw remount

on post-fs
# once everything is setup, no need to modify /
mount rootfs rootfs / rw remount

$ sudo gedit /etc/default/grub

  1. 修改fstab.freescale,使得挂载权限可写
    /dev/block/mmcblk0p5 /system ext4 rw wait

  2. 双重打包ramdisk文件
    cd ramdisk/
    find . | cpio –o –H newc | gzip > ../new-ramdisk.img

  3. 扭转新的boot.img
    由于解压缩后再封装,new-randisk.img文件大小会与原来的initrd.img大小差异,
    万1比原来大,供给再一次设置boot.img的大小,
    翻看原来的大大小小
    cat bootimg.cfg,
    率先行是原来的boot.img的深浅,
    运用ls -l 查看initrd.img和new-ramdisk.img多个公文的大小,
    在本来boot.img的分寸基础上助长多少个文本的大小差(NEWSIZE-BYTES),注意扩展的字节数最佳是block的整数倍,例如40九陆字节等等。
    下一场使用命令生成新的镜像:
    abootimg –create new-boot.img -f bootimg.cfg -k zImage -r
    new-ramdisk.img -c “bootsize=NEWSIZE-BYTES”

  4. 将转移的new-boot.img作为boot.img重新刷入开发板,
    重启后进入系统,system分区变成可写了。

  1. 修改fstab.freescale,使得挂载权限可写
    /dev/block/mmcblk0p5 /system ext4 rw wait

  2. 双重打包ramdisk文件
    cd ramdisk/
    find . | cpio –o –H newc | gzip > ../new-ramdisk.img

  3. 变动新的boot.img
    由于解压缩后再装进,new-randisk.img文件大小会与原来的initrd.img大小不一致,
    一经比原来大,要求重新设置boot.img的尺寸,
    查阅原来的大小
    cat bootimg.cfg,
    第2行是原先的boot.img的大大小小,
    利用ls -l 查看initrd.img和new-ramdisk.img多少个公文的轻重,
    在本来boot.img的尺寸基础上助长四个公文的大小差(NEWSIZE-BYTES),注意扩张的字节数最佳是block的平头倍,例如40九陆字节等等。
    然后采用命令生成新的镜像:
    abootimg –create new-boot.img -f bootimg.cfg -k zImage -r
    new-ramdisk.img -c “bootsize=NEWSIZE-BYTES”

  4. 将扭转的new-boot.img作为boot.img重新刷入开发板,
    重启后进入系统,system分区变成可写了。

查找

GRUB_CMDLINE_LINUX_DEFAULT=”quiet
splash”

把它改为

GRUB_CMDLINE_LINUX_DEFAULT=”quiet
splash text vga=0x311″ 

此地text表示进入文本情势,vga=0x31一代表使用Framebuffer展现驱动,

0x311是提示色深和分辨率的参数

  |640×480 800×600 1024×768
1280×1024

—-+————————————-

256 | 0x301   0x303 0x305 0x307

32k | 0x310   0x313 0x316 0x319

64k | 0x311   0x314 0x317 0x31A

16M | 0x312   0x315 0x318 0x31B

如果使用vga=0x31一参数,必须使用后边提到的vesafb模块,并且撤消黑名单,

要不不能进去系统,必要光盘运维删除vga参数以平复

$ sudo update-grub

写入到/boot/grub/grub.cfg

$ sudo gedit
/etc/initramfs-tools/modules

在其间参与:vesafb

$ sudo gedit
/etc/modprobe.d/blacklist-framebuffer.conf

用#评释以下行

# blacklist vesafb

$ sudo update-initramfs -u

(生成新的initrd)

接下来重启机器,即可进入Framebuffer

若果要切换回X1一,能够输入:

$ startx

有时/boot/grub/grub.cfg的辅导参数不正确导致系统不可能辅导,

能够用光盘指导系统,挂载硬盘后一贯改动/boot/grub/grub.cfg文件

诸如此类就能够跳过update-grub这一步。然后还原原有的带领参数进入X
Window

  1. 使用qemu虚拟Linux

急需编写翻译Linux内核和busybox。

别的还索要libncurses-dev和qemu。

由于qemu可以一向加载内核和initrd,钦定指点参数,

于是不要求修改grub配置。

(一)编写翻译内核和设置qemu

$ tar xjf linux-2.6.39.2.tar.bz2

$ cd linux-2.6.39.2/

$ make help

$ make i386_defconf

$ sudo apt-get install
libncurses-dev

$ make menuconfig

$ make

$ sudo apt-get install qemu

$ qemu –help

$ qemu -kernel
arch/x86/boot/bzImage

$ qemu -kernel
arch/x86/boot/bzImage -append “noapic”

突发性内核会那样崩溃:

MP-BIOS BUG 8254 timer not
connected

trying to set up timer as Virtual
Wire IRQ

于是需求添加-append “noapic”参数

(贰)
修改内核配置,然后重新编写翻译内核。

专注,差异基础版本的布局不均等,

笔者的基业配置作如下改变(用空格切换为*,不要切换为M):

$ make menuconfig

Device Drivers  —>  

Graphics support  —>   

-*- Support for frame buffer
devices  —>  

[*]   VESA VGA graphics
support 

因为VESA辅助彩色色深的来得。

私下认可是不选的,只好是黑白控制台。

Input device support  —> 

[*]     Provide legacy
/dev/psaux device 

稍许库如SDL在识别USB接口的鼠标时会寻找/dev/input/mice和/dev/psaux,

自个儿意识自身编写翻译的水源没有前者,所以用那一个选项创设出/dev/psaux设备。

File systems  —>  

[*] Miscellaneous filesystems
 —>

<*>   Compressed ROM file
system support (cramfs) 

个人喜欢cramfs,不过不是必须的,能够用那么些开关编写翻译cramfs驱动,

测试initramfs是不是平常

General setup  —> 

[*]   Support initial ramdisks
compressed using gzip 

[*] Embedded system

暗中同意i86基石的配备不支持gzip压缩的cpio格式initrd,所以要求手动打开它。

终极再度编译内核:

$ make

(3) 编译busybox

$ tar xjf busybox-1.18.5.tar.bz2

$ cd busybox-1.18.5/

$ make defconfig

$ make menuconfig

设置修改如下:

Busybox Settings  —>  

Build Options  —>

[*] Build BusyBox as a static
binary (no shared libs)  

$ make 

$ make install

暗中认可文件安装在当前目录的_install目录下。

(4) 制作cpio封包gzip压缩的initrd

$ cd ../busybox-1.18.5/_install/

$ mkdir proc sys dev etc
etc/init.d tmp root usr lib

$ gedit etc/init.d/rcS

#!/bin/sh

mount -t proc none /proc

mount -t sysfs none /sys

/sbin/mdev -s

$ chmod +x etc/init.d/rcS

$ cd ../../linux-2.6.39.2/

$ gedit prerun.sh

#!/bin/sh

cd ../busybox-1.18.5/_install

find . | cpio -o –format=newc
> ../rootfs.img

cd .. 

gzip -c rootfs.img >
rootfs.img.gz

cd ../linux-2.6.39.2/

$ . prerun.sh

$ gedit run.sh

#!/bin/sh

qemu -kernel
./arch/i386/boot/bzImage -initrd ../busybox-1.18.5/rootfs.img.gz
 -append “root=/dev/ram rdinit=/sbin/init vga=0x312 noapic”

只顾那里用rdinit=,要是用init=就成了initramfs(内核会报告找不到适当的文件系统)

有关vga=的参数设置见前方(决定色深和分辨率)

$ . run.sh

编写翻译程序,然后用地点写的prerun.sh打包进rootfs.img.gz,然后运行run.sh跑qemu即可。

要是程序是动态链接,须求一定的动态库,

能够把正视的动态库复制到_install/lib目录下,打包到rootfs.img.gz中。

(伍) 进入qemu的效益如下:

美高梅手机版4858 1

美高梅手机版4858 2

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图
Copyright @ 2010-2019 美高梅手机版4858 版权所有