更新android的内核,编译成功后启动,启动log如下
=======================================
...
[   30.236482]  mmcblk0: unknown partition table
...
[   33.453263] Freeing init memory: 160K
[   33.489815] init: could not open /dev/keychord
[   48.453888] init: Unable to open persistent property directory /data/property errno: 2
[   48.463757] init (1): /proc/1/oom_adj is deprecated, please use /proc/1/oom_score_adj instead.
[   48.473176] init: cannot find '/system/bin/servicemanager', disabling 'servicemanager'
[   48.481117] init: cannot find '/system/bin/vold', disabling 'vold'
[   48.487312] init: cannot find '/system/bin/netd', disabling 'netd'
[   48.493494] init: cannot find '/system/bin/debuggerd', disabling 'debuggerd'
[   48.500554] init: cannot find '/system/bin/rild', disabling 'ril-daemon'
[   48.507272] init: cannot find '/system/bin/app_process', disabling 'zygote'
[   48.514265] init: cannot find '/system/bin/mediaserver', disabling 'media'
[   48.521142] init: cannot find '/system/bin/dbus-daemon', disabling 'dbus'
[   48.527952] init: cannot find '/system/bin/installd', disabling 'installd'
[   48.534845] init: cannot find '/system/etc/install-recovery.sh', disabling 'flash_recovery'
[   48.543196] init: cannot find '/system/bin/keystore', disabling 'keystore'
[   48.554192] init: cannot find '/system/bin/sh', disabling 'console'
[   48.561912] enabling adb
[   48.584143] adb_open
[   48.727960] adb_release
[   48.730449] adb_open
[   48.996233] android_usb gadget: high speed config #1: android
===========================================
然后系统就停住了。提高init.rc的log级别,发现init.rc中
mount yaffs2 mtd@system /system
mount yaffs2 mtd@system /ro remount
mount yaffs2 mtd@userdata /data nosuid nodev
mount yaffs2 mtd@cache /cache nosuid nodev
这几句执行出错了返回-1,我检查.config,文件系统的驱动应该已经编译进内核了。Google也没有很好的答案,只有一个帖子提到‘The usual problem is not flashing the system.img at the correct offset. Check that the kernel's system partition offset agrees with u-boot's’
这个的确跟我的现象挺符合的,我用的跟老内核配套的system.img,只更新了kernel。但是我不知道怎么去修改。
我是新手,请各位大牛赐教~

解决方案 »

  1.   

    你使的什么bootloader呀?U-boot么?  里面有分区信息的,你的bootloader里必须写清楚kernal分区从什么地址开始 大小多少  文件系统什么的分区从什么地址开始 大小多少。   如果你什么都没换只换了kernal,显然是大小变了 和后面分区的信息冲上了
      

  2.   

    不会改写u-boot的话,就剪裁kernal
      

  3.   

    tegra的开发板,bootloader是nvidia提供的,没法改。我编的内核比原来的内核还要小一些,而且kernel分区大小是8M,肯定比这个小
      

  4.   

    修改./kernel/fs/partitions下的efi.c文件:
    static u64 last_lba(struct block_device *bdev)
    {
    u64 lba_num; if (!bdev || !bdev->bd_inode)
    return 0;
    // return div_u64(bdev->bd_inode->i_size,
    //        bdev_logical_block_size(bdev)) - 1ULL;
    lba_num = div_u64(bdev->bd_inode->i_size,
      bdev_logical_block_size(bdev));
            //修改处
    if (lba_num < 4194304ULL) //== 3735552ULL) // This is workaround for 2G eMMC
    return lba_num - 4097ULL;
    else
    return lba_num - 1ULL;
    }