标签存档: M8

面大(lamian)的m8 android kernel

面大(lamian)的m8 android kernel共享给大家了,目前的m8 A13内核已经趋于稳定(不过待机电流仍然偏大,否则的话真的可以甩掉魅族的WinCE了)。

大家有兴趣的可以下载回来自己研究下代码:

地址:https://github.com/lamian/m8_android_kernel

代码的目录结构

./initramfs        RAM根(root)文件系统,将在系统引导过程中被加载

./kernel            2.6.29 内核

初始化脚本分析:

简单看了下init初始化脚本(./initramfs/init),基本上还都能看懂。

基本上就是挂载设备和镜像,通过md5来校验版本是否匹配。

#!/bin/sh

# This is the first script called by init process

validmd5=”c4681275d035fc778bb55b98425a0ef5″
/bin/mount -a

/bin/mount -t tmpfs mdev /dev

/bin/echo /sbin/mdev > /proc/sys/kernel/hotplug
/sbin/mdev -s

ifconfig usb0 192.168.1.100 255.255.255.0 up

#Display Logo
/fbv –delay 10 /images/logo.png

test -d /dev/pts || mkdir /dev/pts
/bin/mount -t devpts devpts /dev/pts

/debugmsg.sh

devmem 0x7e00f810 32 0xBFFF6D00
echo ondemand > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor

mkdir -p /mnt/disk
mkdir -p /mnt/looproot
mkdir -p /mnt/patchroot

if [ -e /dev/mmcblk0p5 ]; then
mmcblk=/dev/mmcblk0p5
else
mmcblk=/dev/mmcblk0
fi

mount -t vfat -o fmask=0000,dmask=0000,utf8,errors=continue,sync,dirsync $mmcblk /mnt/disk

if [ -e /mnt/disk/lbe_android/msys.img ]; then
curmd5=`md5sum /mnt/disk/lbe_android/msys.img | cut -d ‘ ‘ -f1`
validmd5=`cat /mnt/disk/lbe_android/version.txt | grep -i “CHECKSUM” | cut -d’=’ -f2`
fi

if [ -e /mnt/disk/lbe_android/mroot.img ] && [ -e /mnt/disk/lbe_android/msys.img ] && [ -e /mnt/disk/lbe_android/mdata.img ] && [ "$validmd5" = "$curmd5" ]; then
foundmdroid=1
mount -o sync,dirsync /mnt/disk/lbe_android/mroot.img /mnt/looproot
if [ $? -ne 0 ]; then
umount /mnt/looproot
foundmdroid=0
fi
mount -r -o loop -t squashfs /mnt/disk/lbe_android/msys.img /mnt/looproot/system
if [ $? -ne 0 ]; then
umount /mnt/looproot/system
umount /mnt/looproot
foundmdroid=0
fi
mount -o sync,dirsync /mnt/disk/lbe_android/mdata.img /mnt/looproot/data
if [ $? -ne 0 ] || [ ! -f /mnt/looproot/data/A11 ]; then
umount /mnt/looproot/data
umount /mnt/looproot/system
umount /mnt/looproot
foundmdroid=0
fi
else
foundmdroid=0
fi

if [ $foundmdroid -ne 1 ]; then
/fbv –delay 50 /images/corrupt.png
umount /mnt/disk
sync
fi

if [ -e /mnt/disk/lbe_android/mpatch_a13.img ]; then
foundmpatch=1
mount /mnt/disk/lbe_android/mpatch_a13.img /mnt/patchroot
else
foundmpatch=0
fi

if [ $foundmpatch -eq 1 ]; then
if  [ -e /mnt/patchroot/patch_apply.sh ]; then
/mnt/patchroot/patch_apply.sh /mnt/patchroot /mnt/looproot
fi
umount /mnt/patchroot
fi

if [ $foundmdroid -eq 1 ]; then

ver=`grep ro.lbe.version /mnt/looproot/init.rc | tr -s ‘ ‘ | cut -d’ ‘ -f4`
if [ "$ver" != "A13" ]; then
/fbv –delay 50 /images/wrongver.png
umount /mnt/looproot/data
umount /mnt/

M8杯具鸟

遇到了传说中的Disk消失问题,搞了2天试图修复,各种办法都试过还是没有希望。

现在已经无奈,选择重新格式化了,好在还能格式化成功,如果不成功的话估计得返厂。

可怜俺那些辛辛苦苦下载的歌曲啊,全都莫有鸟… …

尽管flash出现坏块是无法避免的,但我坚持认为这并非是偶然的内存坏块导致的,而是魅族本身底层驱动程序的缺陷,说不定哪个指针指错了就把整个flash报废了。

引用:NAND flash和NOR flash的可靠性和耐用性差别
采用flahs介质时一个需要重点考虑的问题是可靠性。对于需要扩展MTBF的系统来说,Flash是非常合适的存储方案。可以从寿命(耐用性)、位交换和坏块处理三个方面来比较NOR和NAND的可靠性。

寿命(耐用性): 在NAND闪存中每个块的最大擦写次数是一百万次,而NOR的擦写次数是十万次。NAND存储器除了具有10比1的块擦除周期优势,典型的NAND块尺寸要比NOR器件小8倍,每个NAND存储器块在给定的时间内的删除次数要少一些。

位交换: 所有flash器件都受位交换现象的困扰。在某些情况下(很少见,NAND发生的次数要比NOR多),一个比特位会发生反转或被报告反转了。 一位的变化可能不很明显,但是如果发生在一个关键文件上,这个小小的故障可能导致系统停机。如果只是报告有问题,多读几次就可能解决了。 当然,如果这个位真的改变了,就必须采用错误探测/错误更正(EDC/ECC)算法。位反转的问题更多见于NAND闪存,NAND的供应商建议使用 NAND闪存的时候,同时使用EDC/ECC算法。这个问题对于用NAND存储多媒体信息时倒不是致命的。当然,如果用本地存储设备来存储操作系统、配置文件或其他敏感信息时,必须使用EDC/ECC系统以确保可*性。

坏块处理: NAND器件中的坏块是随机分布的。以前也曾有过消除坏块的努力,但发现成品率太低,代价太高,根本不划算。NAND器件需要对介质进行初始化扫描以发现坏块,并将坏块标记为不可用。在已制成的器件中,如果通过可靠的方法不能进行这项处理,将导致高故障率。

M8囧事

M8上的防盗程序实在是中国特色的软件啊。
不过今天在地铁上和别人正挤的时候突然意外发作了,刚开始振动我还以为有人来电了,结果防盗铃声大作,引得周围人们侧目,人家肯定怀疑这是哪儿来的国产山寨机操着破锣样的喇叭。费好大力气把它从口袋里拿出来,它已经声嘶力竭地模仿警铃了……

Canonical URL by SEO No Duplicate WordPress Plugin