{"id":331,"date":"2018-03-14T09:31:24","date_gmt":"2018-03-14T01:31:24","guid":{"rendered":"http:\/\/www.max-shu.com\/blog\/?p=331"},"modified":"2018-03-14T09:31:24","modified_gmt":"2018-03-14T01:31:24","slug":"linux%e7%9a%84-arch-arm-boot-compressed-vmlinux-lds%ef%bc%8c%e5%86%85%e6%a0%b8%e4%b8%80%e5%88%87%e4%bb%8e%e8%bf%99%e9%87%8c%e5%bc%80%e5%a7%8b","status":"publish","type":"post","link":"http:\/\/www.max-shu.com\/blog\/?p=331","title":{"rendered":"linux\u7684\/arch\/arm\/boot\/compressed\/vmlinux.lds\uff0c\u5185\u6838\u4e00\u5207\u4ece\u8fd9\u91cc\u5f00\u59cb"},"content":{"rendered":"<div>\u8fd9\u91cc\u4ee5linux 2.6.28.6\u5185\u6838\u4e3a\u4f8b\u3002<\/div>\n<div><\/div>\n<div>\u7f16\u8bd1\u5185\u6838\u65f6\u9009\u62e9\u538b\u7f29\u5185\u6838\u800c\u4e14\u662farm\u67b6\u6784\uff0c\u5219Makefile\u8c03\u7528\u7684lds\u6587\u4ef6\u7531arch\/arm\/boot\/compressed\/vmlinux.lds.in\u751f\u6210vmlinux.lds\u6587\u4ef6\u4f9b\u8fde\u63a5\u5668\u4f7f\u7528\u3002\u56e0\u4e3a\u8fde\u63a5\u65f6\u589e\u52a0\u4e86-fpic\u53c2\u6570\uff0c\u6240\u4ee5\u6240\u6709\u4ee3\u7801\u90fd\u662f\u5730\u5740\u65e0\u5173\u7684\uff0c\u9700\u8981\u5b9e\u9645\u8fd0\u884c\u65f6\u7528GOT\u548cPLT\u7684\u65b9\u6cd5\u91cd\u5b9a\u4f4d\u3002<\/div>\n<div><\/div>\n<div>(\u9700\u8981\u6ce8\u610f\u533a\u522b\uff1a<\/div>\n<div>1. arch\/arm\/kernel\/\u6709vmlinux.lds.S\u548chead.S\uff1a\u771f\u6b63\u7684\u5185\u6838lds\u548c\u5165\u53e3\uff0c\u4f1a\u8c03\u7528start_kernel\u51fd\u6570\u8fdb\u5165init\/main.c\uff0c\u7136\u540e\u8fdb\u5165\u5185\u6838\u3002<\/div>\n<div>2. arch\/arm\/boot\/compressed\/vmlinux.lds.in\u548chead.S\uff1auboot\u4e4b\u540e\u7684\u5165\u53e3\uff0c\u5b83\u4f1a\u89e3\u538b\u7f29\u5185\u6838piggy.gz(\u7528gzip\u538b\u7f29\u51fa\u6765\u7684\u542b\u6709\u4e0a\u9762\u7684head.S\u548cmain.c\u7b49\u5185\u6838\u4ee3\u7801\u7684\u6587\u4ef6)\uff0c\u7136\u540e\u8fdb\u5165\u771f\u6b63\u7684\u5185\u6838head.S\u5165\u53e3\u3002<\/div>\n<div>3. mkimage\u4f1a\u628a64\u5b57\u8282\u7684\u5934\u52a0\u4e0azimage\uff08\u542b\u6709boot\/compressed\/head.S\uff0cmisc.c\uff0cpiggy.S\uff0cbig-endian.S\u548cpiggy.gz\u6784\u6210\uff09\u505a\u6210uboot\u53ef\u7528\u7684\u6620\u8c61\u3002)<\/div>\n<div><\/div>\n<div><\/div>\n<div>OUTPUT_ARCH(arm)<br \/>\nENTRY(_start) \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \/*\u4ece_start\u5f00\u59cb\u6267\u884c*\/<br \/>\nSECTIONS<br \/>\n{<br \/>\n. = TEXT_START;<br \/>\n_text = .;<\/p>\n<p>.text : {<br \/>\n_start = .; \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0\/*\u4ece_start\u5c31\u662f\u4ecestart\u6bb5\u5f00\u59cb\u6267\u884c*\/<br \/>\n*(.start)<br \/>\n*(.text)<br \/>\n*(.text.*)<br \/>\n*(.fixup)<br \/>\n*(.gnu.warning)<br \/>\n*(.rodata)<br \/>\n*(.rodata.*)<br \/>\n*(.glue_7)<br \/>\n*(.glue_7t)<br \/>\n*(.piggydata)<br \/>\n. = ALIGN(4);<br \/>\n}<\/p>\n<p>_etext = .;<\/p>\n<p>_got_start = .;<br \/>\n.got\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 : { *(.got) }<br \/>\n_got_end = .;<br \/>\n.got.plt\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 : { *(.got.plt) }<br \/>\n.data\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 : { *(.data) }<br \/>\n_edata = .;<\/p>\n<p>. = BSS_START;<br \/>\n__bss_start = .;<br \/>\n.bss\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 : { *(.bss) }<br \/>\n_end = .;<\/p>\n<p>.stack (NOLOAD)\u00a0\u00a0\u00a0\u00a0 : { *(.stack) }<\/p>\n<p>.stab 0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 : { *(.stab) }<br \/>\n.stabstr 0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 : { *(.stabstr) }<br \/>\n.stab.excl 0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 : { *(.stab.excl) }<br \/>\n.stab.exclstr 0\u00a0\u00a0\u00a0\u00a0 : { *(.stab.exclstr) }<br \/>\n.stab.index 0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 : { *(.stab.index) }<br \/>\n.stab.indexstr 0\u00a0\u00a0\u00a0\u00a0 : { *(.stab.indexstr) }<br \/>\n.comment 0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 : { *(.comment) }<br \/>\n}<\/p><\/div>\n<div><\/div>\n","protected":false},"excerpt":{"rendered":"<p>\u8fd9\u91cc\u4ee5linux 2.6.28.6\u5185\u6838\u4e3a\u4f8b\u3002 \u7f16\u8bd1\u5185\u6838\u65f6\u9009\u62e9\u538b\u7f29\u5185\u6838\u800c\u4e14\u662farm\u67b6\u6784\uff0c\u5219Makefile\u8c03\u7528\u7684 &hellip;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[15],"tags":[9,260,243,244],"class_list":["post-331","post","type-post","status-publish","format-standard","hentry","category-linuxandroid","tag-linux","tag-vmlinux-lds","tag-243","tag-244"],"views":2092,"_links":{"self":[{"href":"http:\/\/www.max-shu.com\/blog\/index.php?rest_route=\/wp\/v2\/posts\/331","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/www.max-shu.com\/blog\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/www.max-shu.com\/blog\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/www.max-shu.com\/blog\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/www.max-shu.com\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=331"}],"version-history":[{"count":1,"href":"http:\/\/www.max-shu.com\/blog\/index.php?rest_route=\/wp\/v2\/posts\/331\/revisions"}],"predecessor-version":[{"id":332,"href":"http:\/\/www.max-shu.com\/blog\/index.php?rest_route=\/wp\/v2\/posts\/331\/revisions\/332"}],"wp:attachment":[{"href":"http:\/\/www.max-shu.com\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=331"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.max-shu.com\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=331"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.max-shu.com\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=331"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}