关闭

全面解析Linux 内核 3.10.x - 开始编译<二>

标签: 内核linuxmips
18680人阅读 评论(0) 收藏 举报
分类:

From: 全面解析Linux 内核 3.10.x - 本文章完全基于MIPS架构

一切手工技艺,皆由口传心授 - 夏奈尔首席鞋匠

1、你不知道的vmlinux - 链接规则

在上面的总结中,关于链接的部分我写的并不是很详细,就是打算在此处在做详细的总结,内核的链接可以说是理解编译最重要的部分,此处要没有问题,就表示你的基本语法没啥问题了,也就不会出现写驱动的时候出现一些连接错误等问题的时候茫然无措的感觉了!

还是得从vmlinux.lds说起

之前没有只是简单的说vmlinux.lds是由vmlinux.lds.S生成的,但是没有说明到底是如何生成的!
根据顶层Makefile中的规则生成vmlinux是由vmlinux.lds 链接生成!
vmlinux.lds 是由vmliux.S生成的!它的规则文件定义在scripts/Makefile.build中!

# Linker scripts preprocessor (.lds.S -> .lds)
# ---------------------------------------------------------------------------
quiet_cmd_cpp_lds_S = LDS     $@
      cmd_cpp_lds_S = $(CPP) $(cpp_flags) -P -C -U$(ARCH) \
                         -D__ASSEMBLY__ -DLINKER_SCRIPT -o $@ $<

$(obj)/%.lds: $(src)/%.lds.S FORCE
    $(call if_changed_dep,cpp_lds_S)

通过上述target会将vmlinux.lds.S 生成 vmlinux.lds!

vmlinux.lds.S文件分析

#define BSS_FIRST_SECTIONS *(.bss..swapper_pg_dir)

#include <asm-generic/vmlinux.lds.h>

#undef mips
#define mips mips
OUTPUT_ARCH(mips)  ##定义平台
ENTRY(kernel_entry) ##text 入口
PHDRS {
    text PT_LOAD FLAGS(7);  /* RWX */
    note PT_NOTE FLAGS(4);  /* R__ */
}

#ifdef CONFIG_32BIT
    #ifdef CONFIG_CPU_LITTLE_ENDIAN
        jiffies  = jiffies_64;
    #else
        jiffies  = jiffies_64 + 4;
    #endif
#else
    jiffies  = jiffies_64;  ##使用jiffies
#endif

SECTIONS
{
#ifdef CONFIG_BOOT_ELF64  ##此宏一般不开
    /* Read-only sections, merged into text segment: */
    /* . = 0xc000000000000000; */

    /* This is the value for an Origin kernel, taken from an IRIX kernel.  */
    /* . = 0xc00000000001c000; */

    /* Set the vaddr for the text segment to a value
     *   >= 0xa800 0000 0001 9000 if no symmon is going to configured
     *   >= 0xa800 0000 0030 0000 otherwise
     */

    /* . = 0xa800000000300000; */
    . = 0xffffffff80300000;     
#endif
    . = VMLINUX_LOAD_ADDRESS;
    /* read-only */
    _text = .;  /* Text and read-only data */
    .text : {
        TEXT_TEXT
        SCHED_TEXT
        LOCK_TEXT
        KPROBES_TEXT
        IRQENTRY_TEXT
        *(.text.*)
        *(.fixup)
        *(.gnu.warning)
    } :text = 0
    _etext = .; /* End of text section */

    EXCEPTION_TABLE(16)

    /* Exception table for data bus errors */
    __dbe_table : {
        __start___dbe_table = .;
        *(__dbe_table)
        __stop___dbe_table = .;
    }

2、你不知道的vmlinux - 其他镜像文件的生成流程

Mips内核代码没有提供关于bzImage以及Image等镜像格式的文件!
因为我们需要vmlinux就够了,只需要在boot中提供关于vmlinux文件的解析即可!
有的人说那文件很大啊,你可以strip -S vmlinux.

boot引导内核

待续…

3、奔跑吧 - 内核

好了,内核镜像已经生成,是骡子是马拉出去溜溜。。

4、说在启动之前的话

前面说了很多编译细节以及编译方法的问题,可能好多人看到这里都开始纠结,说了这么多,怎么感觉看不懂?在扯淡吗?那么您在看看下面的步骤,然后在对照之前看的内容细细品味,也许会有点不同的味道!

编译内核整体流程!
1、获取内核源码
方法1:直接克隆Linus的仓库
git clone https://github.com/torvalds
方法2:通过 wget 获取
wget https://www.kernel.org/pub/linux/kernel/v3.x/linux-3.10.92.tar.xz
方法3:通过kernel.org下载源码
2、解压内核源码
tar xvf linux-3.10.92.tar.xz
3、选择config
cp arch/mips/configs/xx_config .config
4、配置config
make ARCH=mips CROSS_COMPILE=mips-xx-linux menuconfig
保存退出
5、编译内核
make -j 8

长夜漫漫,无心睡眠,如果你既想做实干家,也想做理论家,那么赶紧行动吧!去编译属于你的第一份内核吧!

By: Keven - 点滴积累

0
0
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

全面解析Linux 内核 3.10.x - 如何开始

From: ongoingcre 我寻寻觅觅,寻寻觅觅,一个温暖的怀抱 - 我是一只小小鸟万事开头难 - 如何开始?人总是对未知的事物充满恐惧!就像航海一样,在面对危难的时候,船员和船长是一样心中充...
  • ongoingcre
  • ongoingcre
  • 2015-11-06 22:52
  • 9623

全面解析Linux 内核 3.10.x - 抉择

From: ongoingcre 不在沉默中爆发,就在沉默中灭亡 - 鲁迅大神北京的冬天总是来的快,去的晚。好似冬天就占据了一年的一半,秋装没装上几天,就已经不能抵御那寒风和雾霾!今天好像还飘起了雪...
  • ongoingcre
  • ongoingcre
  • 2015-11-05 22:06
  • 2963

Linux Makefile分析-vmlinux生成

1, 顶层Makefile跟踪: 找到vmlinux目标  # vmlinux image - including updated kernel symbols vmlinux: $...
  • mirkerson
  • mirkerson
  • 2013-07-12 11:12
  • 2433

Linux系统启动那些事—基于Linux 3.10内核

Linux系统启动那些事—基于Linux 3.10内核 csdn 我的空间的下载地址 ,有些做的效果网页上没了,感兴趣建议去上面地址下载pdf版的 下载地址 http:/...
  • hongzg1982
  • hongzg1982
  • 2017-02-02 16:12
  • 1385

编译Linux 3.10内核

1. 下载Linux 3.10 kernel源码 (3.10.105) https://www.kernel.org/ 2. 解压到本地 /home/zombie/File/linux-3.10...
  • qwertyuiop00123
  • qwertyuiop00123
  • 2017-03-05 17:53
  • 689

全面解析Linux 内核 3.10.x - 开始编译<一>

From: ongoingcre 一切手工技艺,皆由口传心授 - 夏奈尔首席鞋匠 1、内核编译体系 - Kbuild貌似是从2.6开始,内核编译就开始采用Kbuild体系! Kbuild几点观念:...
  • ongoingcre
  • ongoingcre
  • 2015-11-11 22:56
  • 6029

全面解析Linux 内核 3.10.x - 如何开始

From: ongoingcre 我寻寻觅觅,寻寻觅觅,一个温暖的怀抱 - 我是一只小小鸟万事开头难 - 如何开始?人总是对未知的事物充满恐惧!就像航海一样,在面对危难的时候,船员和船长是一样心中充...
  • ongoingcre
  • ongoingcre
  • 2015-11-06 22:52
  • 9623

全面解析Linux 内核 3.10.x - 抉择

From: ongoingcre 不在沉默中爆发,就在沉默中灭亡 - 鲁迅大神北京的冬天总是来的快,去的晚。好似冬天就占据了一年的一半,秋装没装上几天,就已经不能抵御那寒风和雾霾!今天好像还飘起了雪...
  • ongoingcre
  • ongoingcre
  • 2015-11-05 22:06
  • 2963

全面解析Linux 内核 3.10.x - 编译前的准备

From: ongoingcre 2015年的第一场雪,比以往时候来的更早一些 - 凛冬将至1、内核最终呈现给我们的形态什么?万事万物都有它最原始的形态,也有它千变万化的形态!但万变不离其宗,同根同...
  • ongoingcre
  • ongoingcre
  • 2015-11-09 21:04
  • 2591

全面解析Linux 内核 3.10.x - 编译前的准备

From: 全面解析Linux 内核 3.10.x - 本文章完全基于MIPS架构 2015年的第一场雪,比以往时候来的更早一些 - 凛冬将至 1、内核最终呈现给我们的形态什么? ...
  • ly890700
  • ly890700
  • 2017-06-29 08:11
  • 136
    Smart L 开源项目分享群
    Smart L
    个人资料
    • 访问:154942次
    • 积分:1799
    • 等级:
    • 排名:千里之外
    • 原创:48篇
    • 转载:4篇
    • 译文:1篇
    • 评论:4条
    最新评论