免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 8910 | 回复: 16
打印 上一主题 下一主题

[驱动] boot.img可以直接boot吗? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-06-20 11:44 |只看该作者 |倒序浏览
boot.img 有Android特定的头文件、然后是kernel、然后才是ramdisk
我们现在的做法是直接跑kernel然后挂载ramdisk
我想问如果是boot.img,如何让他跑起来?我们用的是redboot。
需要修改什么启动参数来让系统识别kernle还有ramdisk的地址吗?

论坛徽章:
0
2 [报告]
发表于 2011-06-20 11:55 |只看该作者
boot.img是 Android封装的一个image
你可以看到boot.img的 文件头都是Android的信息的
这个你要在build boot.img的地方去看,具体可以参考lk代码
在bootable/bootloader/里面应该可以看到bootloader的代码

论坛徽章:
0
3 [报告]
发表于 2011-06-20 12:00 |只看该作者
回复 2# 1jjk


    看了..我现在的问题是如何让boot.img启动?是不是要指明kernel在boot.img哪个位置?是在bootloader指明?

论坛徽章:
0
4 [报告]
发表于 2011-06-20 13:58 |只看该作者
是的

你的Android的代码里面用的是lk还是别的什么?
里面应该有一个指定ramdisk和kernel的位置的实现

  1. n = ROUND_TO_PAGE(hdr->kernel_size, page_mask);
  2.     if (flash_read(ptn, offset, (void *)hdr->kernel_addr, n)) {
  3.         dprintf(CRITICAL, "ERROR: Cannot read kernel image\n");
  4.         return -1;
  5.     }
  6.     offset += n;

  7.     n = ROUND_TO_PAGE(hdr->ramdisk_size, page_mask);
  8.     if (flash_read(ptn, offset, (void *)hdr->ramdisk_addr, n)) {
  9.         dprintf(CRITICAL, "ERROR: Cannot read ramdisk image\n");
  10.         return -1;
  11.     }
  12.     offset += n;

复制代码
然后在后面的boot_linux里面实现linux的加载,关键的就是boot_linux里面了

  1. boot_linux((void *)hdr->kernel_addr, (void *)TAGS_ADDR,
  2.            (const char *)cmdline, board_machtype(),
  3.            (void *)hdr->ramdisk_addr, hdr->ramdisk_size);

复制代码
然后在boot_linux里面可以看到加载kernel的操作

论坛徽章:
0
5 [报告]
发表于 2011-06-20 14:10 |只看该作者
回复 4# 1jjk


    boot_linux是指bootloader?  我用的是redboot,是需要添加参数上去?我现在没有添加什么参数,直接跑kernel分区。所以现在改成boot.img分区就跑不了。

论坛徽章:
0
6 [报告]
发表于 2011-06-20 14:18 |只看该作者
回复  1jjk


    boot_linux是指bootloader?  我用的是redboot,是需要添加参数上去?我现在没有添加什 ...
sourxsunny 发表于 2011-06-20 14:10



你可以直接跑kernel,然后去做个init,去挂载system.img,这个灵活性你可以自己掌握
不过我觉得最好还是有个参考好些
我帖的那段代码能有什么帮助没?

论坛徽章:
0
7 [报告]
发表于 2011-06-20 14:22 |只看该作者
回复 6# 1jjk


    对..我现在正常的情况是直接跑kernel,然后挂载root和system。
   但现在要增加recovery模式,所以需要编译出boot.img。然后编译出recovery.img
    问题是redboot是直接跑地址的,没有参数的传递(你是用u-boot)?
    如果这样的话,我有什么办法添加recovery模式?我在系统运行下运行recovery模式没有反应


   你说的(Android的代码里面用的是lk)是什么意思?

论坛徽章:
0
8 [报告]
发表于 2011-06-20 14:46 |只看该作者
不是"一k",是"爱欧k"(little kernel)

论坛徽章:
0
9 [报告]
发表于 2011-06-20 14:50 |只看该作者
回复 8# 1jjk


    意思是recovery模式下是进入android的lk?

论坛徽章:
0
10 [报告]
发表于 2011-06-20 14:53 |只看该作者
回复  1jjk


    意思是recovery模式下是进入android的lk?
sourxsunny 发表于 2011-06-20 14:50



    不是的,我说的lk是bootloader,呵呵
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP