文件系统与存储:MBR/EBR类型分区建立

1 linux启动的几个阶段:

对应关系

阶段1

 阶段2

  阶段3

 

Boise(引导从u盘,硬盘,cdrom等启动)

Grub

Kernel

系统

preloader(完成下载+启动引导)

Lk

 kernel

Systermimg

 

android智能机上 分区表再各个阶段的作用:

 

注意:Dumchar是debug信息用(用户模式读写某分区镜像等),分区表的建立等由内核block子系统来完成。dumchar调试如下:

 

Dumchar_info的分区信息在哪里创建:???

/dev/bootimg

 /dev/otp

/dev/nvram

 

dumchar_probe () ---

{

for (l = 0; l<PART_NUM; l++){

if(!strcmp(dumchar_devices[l].dumname,"otp")){

dumchar_device[l]= device_create(dumchar_class, NULL, MKDEV(major, l),NULL,"otp_bak");

}else{

dumchar_device[l]= device_create(dumchar_class, NULL,MKDEV(major, l),NULL, dumchar_devices[l].dumname);

}

}

 

。。。。。

}

而且绑定了dumchar_fops:

structfile_operations dumchar_fops = {

.owner=     THIS_MODULE,

.llseek=    dumchar_llseek,

.read =             dumchar_read,

.write =     dumchar_write,

.unlocked_ioctl=     dumchar_ioctl,

.open=          dumchar_open,

.release=   dumchar_release,

};

所以可以读写分区。获取分区的方法:

1.flashtool ---根据scat读取分区

2.adb 获取:

Adb shell dd if=/dev/bootimg of=/sdcard/boot.img bs=6291456 count=1  

  -----获取bootimg分区  bs=6291456 (mtk一般是6MB)。这里是把整个bootimage分区读出,也是可以的,正确的读法是根据

   ---------然后可以使用split_bootimg.pl 脚本bootimg中提取出roofs

Adb  pull /dev/bootimg 就是bootimg分区开始 读取flash

Adb  pull /dev/mbr 就是mbr分区开始 读取flash

 

 

2 分析MBR


主引导记录最开头是第一阶段引导代码。其中的硬盘引导程序的主要作用是检查分区表是否正确并且在系统硬件完成自检以后将控制权交给硬盘上的引导程序(如GNUGRUB)。它不依赖任何操作系统,而且启动代码也是可以改变的,从而能够实现多系统引导

------这里为00,应为不需要操作系统引导,只是单系统,所以我们是可以做一个手机多个操作系统的。

 

3 内核什么时候读取MBR的分区表和建立block设备的节点呢?以及其作用?

首先建立磁盘(比如一块emmc,一块sd卡,一个硬盘)的块设备节点,先了解两个知识点:

1)linux内核中支持的磁盘类型:(做分区表都是根据磁盘类型来做的分区)

static int(*check_part[])(struct parsed_partitions *) = {

/*

 * Probe partition formats with tables at diskaddress 0

 * that also have an ADFS boot block at 0xdc0.

 */

#ifdefCONFIG_ACORN_PARTITION_ICS

adfspart_check_ICS,

#endif

#ifdefCONFIG_ACORN_PARTITION_POWERTEC

adfspart_check_POWERTEC,

#endif

#ifdefCONFIG_ACORN_PARTITION_EESOX

adfspart_check_EESOX,

#endif

 

/*

 * Now move on to formats that only havepartition info at

 * disk address 0xdc0.  Since these may also have stale

 * PC/BIOS partition tables, they need to comebefore

 * the msdos entry.

 */

#ifdefCONFIG_ACORN_PARTITION_CUMANA

adfspart_check_CUMANA,

#endif

#ifdefCONFIG_ACORN_PARTITION_ADFS

adfspart_check_ADFS,

#endif

 

#ifdefCONFIG_EFI_PARTITION

efi_partition,                /*this must come before msdos */

#endif

#ifdefCONFIG_SGI_PARTITION

sgi_partition,

#endif

#ifdefCONFIG_LDM_PARTITION

ldm_partition,                /*this must come before msdos */

#endif

#ifdefCONFIG_MSDOS_PARTITION

msdos_partition,---------------》手机上基本上是这种。

#endif

#ifdefCONFIG_OSF_PARTITION

osf_partition,

#endif

#ifdefCONFIG_SUN_PARTITION

sun_partition,

#endif

#ifdefCONFIG_AMIGA_PARTITION

amiga_partition,

#endif

#ifdefCONFIG_ATARI_PARTITION

atari_partition,

#endif

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值