天嵌 ARM开发社区

 找回密码
 注册
查看: 2136|回复: 6

Linux启动代码分析

[复制链接]
binxd 发表于 2010-5-12 15:18:12 | 显示全部楼层 |阅读模式
天嵌的工程师们能不能分析一下出厂时Linux的启动代码,比如说:内存映射是怎么个样子,各种地址,虚拟地址和物理地址
还有就是,u-boot启动Linux时,启动参数存放地址是怎么确定的?
请帮帮忙,回答一下?
lansky 发表于 2010-5-12 18:48:49 | 显示全部楼层
1# binxd

这个估计得多研究u-boot了……

找书籍看……
 楼主| binxd 发表于 2010-5-13 09:16:57 | 显示全部楼层
天嵌工程师能不能说说出厂代码里关于这些代码的设置原因啊?!
亚瑟王 发表于 2010-5-13 17:13:04 | 显示全部楼层
你能具体说是什么参数吗?
 楼主| binxd 发表于 2010-5-14 09:13:49 | 显示全部楼层
你能具体说是什么参数吗?
亚瑟王 发表于 2010-5-13 17:13

int boot_zImage(ulong from, size_t size)
{
        int ret;
        ulong boot_mem_base;        /* base address of bootable memory */
        ulong to;
        ulong mach_type;

        boot_mem_base = 0x30000000;

        /* copy kerne image */
        to = boot_mem_base + LINUX_KERNEL_OFFSET;
        printk("Copy linux kernel from 0x%08lx to 0x%08lx, size = 0x%08lx ... ",
                from, to, size);
        ret = copy_kernel_img(to, (char *)from, size);
        if (ret) {
                printk("failed\n");
                return -1;
        } else {
                printk("Copy Kernel to SDRAM done,");
        }

        if (*(ulong *)(to + 9*4) != LINUX_ZIMAGE_MAGIC) {
                printk("Warning: this binary is not compressed linux kernel image\n");
                printk("zImage magic = 0x%08lx\n", *(ulong *)(to + 9*4));
        } else {
//                printk("zImage magic = 0x%08lx\n", *(ulong *)(to + 9*4));
                ;
        }

        /* Setup linux parameters and linux command line */
        setup_linux_param(boot_mem_base + LINUX_PARAM_OFFSET);

        /* Get machine type */
        mach_type = MACH_TYPE_S3C2440;
//        printk("MACH_TYPE = %d\n", mach_type);

        /* Go Go Go */
        printk("NOW, Booting Linux......\n");       
        call_linux(0, mach_type, to);

        return 0;       
}
这里有一段设置Linux启动参数的代码
/* Setup linux parameters and linux command line */
        setup_linux_param(boot_mem_base + LINUX_PARAM_OFFSET);
这里的参数存放地址是如何确定的,也就是为什么把参数的存放地址选在这里。内存的地址映射情况是怎么样的?
另外,u-boot传递给Linux的参数是什么?为什么要传递这些参数?能不能给个方向,如果要知道这些,需要了解哪些知识?谢谢!
亚瑟王 发表于 2010-5-14 12:21:14 | 显示全部楼层
这个地址是在Linux中确定的,Linux中限定了这个参数在SDRAM中的位置,然后在uboot中都要将参数放到这个位置,不然内核读不到对应的参数。
这个参数内容:noinitrd root=/dev/mtdblock2 init=/linuxrc console=ttySAC0
告诉内核启动时使用什么作为控制台,初始化文件在哪里,文件系统在哪里等等信息。
 楼主| binxd 发表于 2010-5-14 14:23:24 | 显示全部楼层
这个地址是在Linux中确定的,Linux中限定了这个参数在SDRAM中的位置,然后在uboot中都要将参数放到这个位置,不然内核读不到对应的参数。
这个参数内容:noinitrd root=/dev/mtdblock2 init=/linuxrc console=ttySA ...
亚瑟王 发表于 2010-5-14 12:21

谢谢亚瑟王的指点。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

i.MX8系列ARM cortex A53 M4 工控板上一条 /1 下一条

Archiver|手机版|小黑屋|天嵌 嵌入式开发社区 ( 粤ICP备11094220号-2 )

GMT+8, 2024-9-20 02:51 , Processed in 1.033137 second(s), 19 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表