{"id":66,"date":"2021-12-12T01:02:00","date_gmt":"2021-12-12T01:02:00","guid":{"rendered":"https:\/\/zhewana.cn\/?p=66"},"modified":"2022-12-19T21:05:18","modified_gmt":"2022-12-19T13:05:18","slug":"66","status":"publish","type":"post","link":"https:\/\/zhewana.cn\/?p=66","title":{"rendered":"The GNU Linker\u90e8\u5206\u8bd1\u6587"},"content":{"rendered":"<h2>3 \u94fe\u63a5\u811a\u672c<\/h2>\n<p>\u6bcf\u4e2a\u94fe\u63a5\u90fd\u7531<strong>\u94fe\u63a5\u811a\u672c\uff08linker script\uff09<\/strong>\u63a7\u5236\u3002\u6b64\u811a\u672c\u662f\u7528\u94fe\u63a5\u5668\u547d\u4ee4\u8bed\u8a00\u7f16\u5199\u7684\u3002<\/p>\n<p>\u94fe\u63a5\u5668\u811a\u672c\u7684\u4e3b\u8981\u76ee\u7684\u662f\u63cf\u8ff0\u5982\u4f55\u5c06\u8f93\u5165\u6587\u4ef6\u4e2d\u7684<strong>\u6bb5\uff08sections\uff09<\/strong>\u6620\u5c04\u5230\u8f93\u51fa\u6587\u4ef6\uff0c\u5e76<strong>\u63a7\u5236\u8f93\u51fa\u6587\u4ef6\u7684\u5185\u5b58\u5e03\u5c40<\/strong>\u3002\u5927\u591a\u6570\u94fe\u63a5\u5668\u811a\u672c\u53ea\u505a\u8fd9\u4e9b\u3002\u4f46\u662f\uff0c\u5fc5\u8981\u65f6\uff0c\u94fe\u63a5\u5668\u811a\u672c\u8fd8\u53ef\u4ee5\u4f7f\u7528\u4e0b\u9762\u63cf\u8ff0\u7684\u547d\u4ee4\u6307\u793a\u94fe\u63a5\u5668\u6267\u884c\u8bb8\u591a\u5176\u4ed6\u64cd\u4f5c\u3002<\/p>\n<p>\u94fe\u63a5\u5668\u59cb\u7ec8\u4f7f\u7528\u94fe\u63a5\u5668\u811a\u672c\u3002\u5982\u679c\u60a8\u81ea\u5df1\u6ca1\u6709\u63d0\u4f9b\uff0c\u94fe\u63a5\u5668\u5c06\u4f7f\u7528\u7f16\u8bd1\u5230\u94fe\u63a5\u5668\u53ef\u6267\u884c\u6587\u4ef6\u4e2d\u7684\u9ed8\u8ba4\u811a\u672c\u3002\u53ef\u4ee5\u4f7f\u7528<code>--verbose<\/code>\u547d\u4ee4\u884c\u9009\u9879\u663e\u793a\u9ed8\u8ba4\u94fe\u63a5\u5668\u811a\u672c\u3002\u67d0\u4e9b\u547d\u4ee4\u884c\u9009\u9879\uff08\u5982<code>-r<\/code>\u6216<code>-N<\/code>\uff09\u5c06\u5f71\u54cd\u9ed8\u8ba4\u94fe\u63a5\u5668\u811a\u672c\u3002<\/p>\n<p>\u60a8\u53ef\u4ee5\u4f7f\u7528<code>-T<\/code>\u547d\u4ee4\u884c\u9009\u9879\u6765\u63d0\u4f9b\u81ea\u5df1\u7684\u94fe\u63a5\u5668\u811a\u672c\u3002\u6267\u884c\u6b64\u64cd\u4f5c\u65f6\uff0c<strong>\u60a8\u63d0\u4f9b\u7684\u94fe\u63a5\u5668\u811a\u672c\u5c06\u66ff\u6362\u9ed8\u8ba4\u94fe\u63a5\u5668\u811a\u672c<\/strong>\u3002<\/p>\n<p>\u60a8\u8fd8\u53ef\u4ee5\u901a\u8fc7\u5c06\u94fe\u63a5\u5668\u811a\u672c<strong>\u547d\u540d\u4e3a\u94fe\u63a5\u5668\u7684\u8f93\u5165\u6587\u4ef6<\/strong>\u6765\u9690\u5f0f\u4f7f\u7528\u94fe\u63a5\u5668\u811a\u672c\uff0c\u5c31\u50cf\u5b83\u4eec\u662f\u8981\u94fe\u63a5\u7684\u6587\u4ef6\u4e00\u6837\u3002<\/p>\n<h3>3.1 \u57fa\u672c\u94fe\u63a5\u811a\u672c\u6982\u5ff5<\/h3>\n<p>\u4e3a\u4e86\u63cf\u8ff0\u94fe\u63a5\u5668\u811a\u672c\u8bed\u8a00\uff0c\u6211\u4eec\u9700\u8981\u5b9a\u4e49\u4e00\u4e9b\u57fa\u672c\u6982\u5ff5\u548c\u8bcd\u6c47\u8868\u3002<\/p>\n<p>\u94fe\u63a5\u5668\u5c06\u591a\u4e2a\u8f93\u5165\u6587\u4ef6\u5408\u5e76\u5230\u5355\u4e2a\u8f93\u51fa\u6587\u4ef6\u4e2d\u3002\u8f93\u51fa\u6587\u4ef6\u548c\u6bcf\u4e2a\u8f93\u5165\u6587\u4ef6\u90fd\u91c7\u7528\u79f0\u4e3a\u5bf9\u8c61\u6587\u4ef6\u683c\u5f0f\u7684\u7279\u6b8a\u6570\u636e\u683c\u5f0f\u3002\u6bcf\u4e2a\u6587\u4ef6\u79f0\u4e3a<strong>\u5bf9\u8c61\u6587\u4ef6<\/strong>\uff08object file\uff09\u3002\u8f93\u51fa\u6587\u4ef6\u901a\u5e38\u79f0\u4e3a\u53ef\u6267\u884c\u6587\u4ef6\uff0c\u4f46\u51fa\u4e8e\u6211\u4eec\u7684\u76ee\u7684\uff0c\u6211\u4eec\u4e5f\u5c06\u5176\u79f0\u4e3a\u5bf9\u8c61\u6587\u4ef6\u3002\u6bcf\u4e2a\u5bf9\u8c61\u6587\u4ef6\u90fd\u6709\u4e00\u4e2a\u6bb5\u5217\u8868\u3002\u6211\u4eec\u6709\u65f6\u5c06\u8f93\u5165\u6587\u4ef6\u4e2d\u7684\u4e00\u4e2a\u6bb5\u79f0\u4e3a<strong>\u8f93\u5165\u6bb5<\/strong>\uff08input section\uff09\uff1b\u7c7b\u4f3c\u5730\uff0c\u8f93\u51fa\u6587\u4ef6\u4e2d\u7684\u6bb5\u4e5f\u662f<strong>\u8f93\u51fa\u6bb5<\/strong>\uff08output section\uff09\u3002<\/p>\n<p>\u5bf9\u8c61\u6587\u4ef6\u4e2d\u7684\u6bcf\u4e2a\u6bb5\u90fd\u6709\u4e00\u4e2a<strong>\u540d\u79f0<\/strong>\u548c<strong>\u5927\u5c0f<\/strong>\u3002\u5927\u591a\u6570\u6bb5\u8fd8\u5177\u6709\u76f8\u5173\u7684\u6570\u636e\u5757\uff0c\u79f0\u4e3a<strong>\u6bb5\u5185\u5bb9<\/strong>\uff08section contents\uff09\u3002\u4e00\u4e2a\u6bb5\u53ef\u4ee5\u6807\u8bb0\u4e3a<strong>loadable<\/strong>\uff0c\u8fd9\u610f\u5473\u7740\u5728\u8fd0\u884c\u8f93\u51fa\u6587\u4ef6\u65f6\u5e94\u5c06\u5185\u5bb9\u52a0\u8f7d\u5230\u5b58\u50a8\u5668\u4e2d\u3002\u6ca1\u6709\u5185\u5bb9\u7684\u6bb5\u53ef\u80fd\u662f\u53ef\u5206\u914d\u7684\uff08allocatable\uff09\uff0c\u8fd9\u610f\u5473\u7740\u5185\u5b58\u4e2d\u7684\u533a\u57df\u5e94\u653e\u5728\u4e00\u8fb9\uff0c\u4f46\u662f\u6ca1\u6709\u4efb\u4f55\u5185\u5bb9\u5e94\u8be5\u52a0\u8f7d\uff08\u5728\u67d0\u4e9b\u60c5\u51b5\u4e0b\uff0c\u8be5\u5b58\u50a8\u5668\u5fc5\u987b\u5f52\u96f6\uff09\u3002\u65e2\u4e0d\u53ef\u52a0\u8f7d\u4e5f\u4e0d\u53ef\u5206\u914d\u7684\u6bb5\u901a\u5e38\u5305\u542b\u67d0\u79cd\u8c03\u8bd5\u4fe1\u606f\u3002<\/p>\n<p>\u6bcf\u4e2a\u53ef\u52a0\u8f7d\u6216\u5206\u914d\u7684\u8f93\u51fa\u6bb5\u90fd\u6709\u4e24\u4e2a\u5730\u5740\u3002\u7b2c\u4e00\u4e2a\u662f<strong>VMA\uff08virtual memory address\uff09<\/strong>\uff0c\u8fd9\u662f\u8fd0\u884c\u8f93\u51fa\u6587\u4ef6\u65f6\u6bb5\u5c06\u5177\u6709\u7684\u5730\u5740\u3002\u7b2c\u4e8c\u4e2a\u662f<strong>LMA\uff08load memory address\uff09<\/strong>\uff0c\u8be5\u6bb5\u5c06\u4f1a\u4ece\u6b64\u5730\u5740\u88ab\u52a0\u8f7d\u51fa\u6765\u3002\u5728\u5927\u591a\u6570\u60c5\u51b5\u4e0b\uff0c\u4e24\u4e2a\u5730\u5740\u5c06\u662f\u76f8\u540c\u7684\u3002\u5b83\u4eec\u53ef\u80fd\u4e0d\u540c\u7684\u793a\u4f8b\u662f\u5c06\u6570\u636e\u90e8\u5206\u52a0\u8f7d\u5230ROM\u4e2d\u540e\u5728\u7a0b\u5e8f\u542f\u52a8\u65f6\u590d\u5236\u5230RAM\u4e2d\uff08\u6b64\u6280\u672f\u901a\u5e38\u7528\u4e8e\u521d\u59cb\u5316ROM\u4e2d\u7684\u5168\u5c40\u53d8\u91cf\uff09\u3002\u5728\u8fd9\u79cd\u60c5\u51b5\u4e0b\uff0cROM\u5730\u5740\u5c06\u662fLMA\uff0cRAM\u5730\u5740\u5c06\u662fVMA\u3002<\/p>\n<p>\u901a\u8fc7\u4f7f\u7528\u5e26\u6709<code>-h<\/code>\u9009\u9879\u7684objdump\u7a0b\u5e8f\uff0c\u53ef\u4ee5\u67e5\u770b\u5bf9\u8c61\u6587\u4ef6\u4e2d\u7684\u90e8\u5206\u3002\u6bcf\u4e2a\u5bf9\u8c61\u6587\u4ef6\u8fd8\u6709\u4e00\u4e2a\u7b26\u53f7\u5217\u8868\uff0c\u79f0\u4e3a<strong>\u7b26\u53f7\u8868<\/strong>\uff08symbol table\uff09\u3002\u7b26\u53f7\u53ef\u4ee5\u662f\u5df2\u5b9a\u4e49\u7684\uff0c\u4e5f\u53ef\u4ee5\u662f\u672a\u5b9a\u4e49\u7684\u3002\u6bcf\u4e2a\u7b26\u53f7\u90fd\u6709\u4e00\u4e2a\u540d\u79f0\uff0c\u6bcf\u4e2a\u5df2\u7ecf\u5b9a\u4e49\u7684\u7b26\u53f7\u90fd\u6709\u4e00\u4e2a\u5730\u5740\uff0c\u8fd8\u6709\u5176\u4ed6\u4fe1\u606f\u3002\u5982\u679c\u60a8\u5c06\u4e00\u4e2a c \u6216 c + + \u7a0b\u5e8f\u7f16\u8bd1\u6210\u4e00\u4e2a\u5bf9\u8c61\u6587\u4ef6\uff0c\u60a8\u5c06\u83b7\u5f97\u6bcf\u4e2a<strong>\u5df2\u7ecf\u5b9a\u4e49\u7684\u51fd\u6570<\/strong>\u4ee5\u53ca<strong>\u5168\u5c40\u6216\u9759\u6001\u53d8\u91cf<\/strong>\u7684<strong>\u5df2\u5b9a\u4e49\u7684\u7b26\u53f7<\/strong>\u3002\u8f93\u5165\u6587\u4ef6\u4e2d\u5f15\u7528\u7684\u6bcf\u4e2a\u672a\u5b9a\u4e49\u7684\u51fd\u6570\u6216\u5168\u5c40\u53d8\u91cf\u90fd\u5c06\u6210\u4e3a\u672a\u5b9a\u4e49\u7684\u7b26\u53f7\u3002<\/p>\n<p>\u60a8\u53ef\u4ee5\u4f7f\u7528nm\u7a0b\u5e8f\u6216\u4f7f\u7528\u5e26\u6709<code>-t<\/code>\u9009\u9879\u7684objdump\u7a0b\u5e8f\u67e5\u770b\u5bf9\u8c61\u6587\u4ef6\u4e2d\u7684\u7b26\u53f7\u3002<\/p>\n<h3>3.2 \u94fe\u63a5\u811a\u672c\u683c\u5f0f<\/h3>\n<p>\u94fe\u63a5\u811a\u672c\u662f<strong>\u6587\u672c\u6587\u4ef6<\/strong>\u3002<\/p>\n<p>\u5c06\u94fe\u63a5\u5668\u811a\u672c\u4f5c\u4e3a\u4e00\u7cfb\u5217\u547d\u4ee4\u7f16\u5199\u3002\u6bcf\u4e2a\u547d\u4ee4\u8981\u4e48\u662f\u4e00\u4e2a\u5173\u952e\u5b57\uff08\u53ef\u80fd\u540e\u8ddf\u53c2\u6570\uff09\uff0c\u8981\u4e48\u662f\u4e00\u4e2a\u7b26\u53f7\u8d4b\u503c\u3002\u53ef\u4ee5\u4f7f\u7528\u5206\u53f7\u5206\u9694\u547d\u4ee4\u3002<strong>\u7a7a\u683c\u901a\u5e38\u88ab\u5ffd\u7565\u3002<\/strong><\/p>\n<p>\u901a\u5e38\u53ef\u4ee5\u76f4\u63a5\u8f93\u5165\u6587\u4ef6\u540d\u6216\u683c\u5f0f\u540d\u7b49\u5b57\u7b26\u4e32\u3002\u5982\u679c\u6587\u4ef6\u540d\u5305\u542b\u4e00\u4e2a\u5b57\u7b26\uff0c\u4f8b\u5982\u7b26\u5408\u5206\u9694\u6587\u4ef6\u540d\u7684\u9017\u53f7\uff0c\u5219\u53ef\u4ee5\u5c06\u6587\u4ef6\u540d\u653e\u5728\u53cc\u5f15\u53f7\u4e2d\u3002\u65e0\u6cd5\u5728\u6587\u4ef6\u540d\u4e2d\u4f7f\u7528\u53cc\u5f15\u53f7\u5b57\u7b26\u3002<\/p>\n<p>\u60a8\u53ef\u4ee5\u5728\u94fe\u63a5\u5668\u811a\u672c\u4e2d\u5305\u542b\u6ce8\u91ca\uff0c\u5c31\u50cf\u5728C\u4e2d\u4e00\u6837\uff0c\u7531<code>\/*<\/code>\u548c<code>*\/<\/code>\u5206\u9694\u3002\u4e0eC\u8bed\u8a00\u4e00\u6837\uff0c\u6ce8\u91ca\u5728\u8bed\u6cd5\u4e0a\u7b49\u540c\u4e8e\u7a7a\u683c\u3002<\/p>\n<h3>3.3\u7b80\u5355\u94fe\u63a5\u5668\u811a\u672c\u793a\u4f8b<\/h3>\n<p>\u8bb8\u591a\u94fe\u63a5\u5668\u811a\u672c\u76f8\u5f53\u7b80\u5355\u3002<\/p>\n<p>\u6700\u7b80\u5355\u7684\u94fe\u63a5\u5668\u811a\u672c\u53ea\u6709\u4e00\u4e2a\u547d\u4ee4\uff1a<strong>SECTIONS<\/strong>\u3002\u60a8\u53ef\u4ee5\u4f7f\u7528<strong>SECTIONS<\/strong>\u547d\u4ee4\u6765\u63cf\u8ff0\u8f93\u51fa\u6587\u4ef6\u7684\u5185\u5b58\u5e03\u5c40\u3002<\/p>\n<p><strong>SECTIONS<\/strong>\u547d\u4ee4\u662f\u4e00\u4e2a\u5f3a\u5927\u7684\u547d\u4ee4\u3002\u8fd9\u91cc\u6211\u4eec\u5c06\u63cf\u8ff0\u5b83\u7684\u4e00\u4e2a\u7b80\u5355\u7528\u6cd5\u3002\u5047\u8bbe\u60a8\u7684\u7a0b\u5e8f\u53ea\u5305\u542b\u4ee3\u7801\u3001\u521d\u59cb\u5316\u6570\u636e\u548c\u672a\u521d\u59cb\u5316\u6570\u636e\u3002\u5b83\u4eec\u5c06\u5206\u522b\u4f4d\u4e8e<code>.text<\/code>\u3001<code>.data<\/code>\u548c<code>.bss<\/code>\u90e8\u5206\u3002\u8ba9\u6211\u4eec\u8fdb\u4e00\u6b65\u5047\u8bbe\u8fd9\u4e9b\u662f\u5728\u8f93\u5165\u6587\u4ef6\u4e2d\u51fa\u73b0\u7684\u552f\u4e00\u90e8\u5206\u3002<\/p>\n<p>\u5bf9\u4e8e\u672c\u4f8b\uff0c\u5047\u8bbe\u4ee3\u7801\u5e94\u8be5\u52a0\u8f7d\u5230\u5730\u57400x10000\uff0c\u6570\u636e\u5e94\u8be5\u4ece\u5730\u57400x8000000\u5f00\u59cb\u3002\u4e0b\u9762\u662f\u4e00\u4e2a\u94fe\u63a5\u5668\u811a\u672c\uff0c\u5b83\u5c06\u6267\u884c\u4ee5\u4e0b\u64cd\u4f5c\uff1a<\/p>\n<pre><code class=\"language-linkerscript\">SECTIONS \n{\n    . = 0x10000; \n    .text : { *(.text) } \n    . = 0x8000000; \n    .data : { *(.data) } \n    .bss : { *(.bss) }\n}<\/code><\/pre>\n<p>\u5c06<strong>SECTIONS<\/strong>\u547d\u4ee4\u4f5c\u4e3a\u5173\u952e\u5b57<strong>SECTIONS<\/strong>\u7f16\u5199\uff0c\u7136\u540e\u662f\u4e00\u7cfb\u5217\u7b26\u53f7\u8d4b\u503c\u548c\u7528\u5927\u62ec\u53f7\u62ec\u8d77\u6765\u7684\u8f93\u51fa\u6bb5\u8bf4\u660e\u3002<\/p>\n<p>\u4e0a\u4f8b\u7684\u201cSECTIONS\u201d\u547d\u4ee4\u5185\u7684\u7b2c\u4e00\u884c<strong>\u8bbe\u7f6e\u7279\u6b8a\u7b26\u53f7\u201c.\u201d\u7684\u503c<\/strong>\uff0c\u8be5\u7b26\u53f7\u662f<strong>\u4f4d\u7f6e\u8ba1\u6570\u5668<\/strong>\u3002\u5982\u679c\u672a\u4ee5\u5176\u4ed6\u65b9\u5f0f\u6307\u5b9a\u8f93\u51fa\u6bb5\u7684\u5730\u5740\uff08\u5176\u4ed6\u65b9\u5f0f\u5c06\u5728\u540e\u9762\u4ecb\u7ecd\uff09\uff0c\u5219\u5c06\u6839\u636e\u4f4d\u7f6e\u8ba1\u6570\u5668\u7684\u5f53\u524d\u503c\u8bbe\u7f6e\u5730\u5740\u3002\u7136\u540e\uff0c<strong>\u4f4d\u7f6e\u8ba1\u6570\u5668\u6309\u8f93\u51fa\u90e8\u5206\u7684\u5927\u5c0f\u9012\u589e<\/strong>\u3002\u5728<strong>SECTIONS<\/strong>\u547d\u4ee4\u7684\u5f00\u5934\uff0c\u4f4d\u7f6e\u8ba1\u6570\u5668\u7684\u503c\u4e3a'0'\u3002<\/p>\n<p>\u7b2c\u4e8c\u884c\u5b9a\u4e49\u4e86\u4e00\u4e2a\u8f93\u51fa\u6bb5<code>.text<\/code>\u3002\u5192\u53f7\u662f\u5fc5\u9700\u7684\u8bed\u6cd5\uff0c\u76ee\u524d\u53ef\u80fd\u4f1a\u88ab\u5ffd\u7565\u3002\u5728\u8f93\u51fa\u6bb5\u540d\u79f0\u540e\u7684\u5927\u62ec\u53f7\u5185\uff0c\u5217\u51fa\u5e94\u653e\u7f6e\u5728\u6b64\u8f93\u51fa\u6bb5\u4e2d\u7684\u8f93\u5165\u6bb5\u7684\u540d\u79f0\u3002<code>*<\/code>\u662f\u4e0e\u4efb\u4f55\u6587\u4ef6\u540d\u5339\u914d\u7684\u901a\u914d\u7b26\u3002\u8868\u8fbe\u5f0f<code>*\uff08.text\uff09<\/code>\u8868\u793a\u6240\u6709\u8f93\u5165\u6587\u4ef6\u4e2d\u7684\u6240\u6709<code>.text<\/code>\u8f93\u5165\u6bb5\u3002<\/p>\n<p>\u7531\u4e8e\u5b9a\u4e49\u8f93\u51fa\u6bb5<code>.text<\/code>\u65f6\u4f4d\u7f6e\u8ba1\u6570\u5668\u4e3a\u201c0x10000\u201d\uff0c\u56e0\u6b64\u94fe\u63a5\u5668\u4f1a\u5c06\u8f93\u51fa\u6587\u4ef6\u4e2d<code>.text<\/code>\u6bb5\u7684\u5730\u5740\u8bbe\u7f6e\u4e3a\u201c0x10000\u201d\u3002<\/p>\n<p>\u5176\u4f59\u7684\u884c\u5b9a\u4e49\u8f93\u51fa\u6587\u4ef6\u4e2d\u7684<code>.data<\/code>\u548c<code>.bss<\/code>\u6bb5\u3002\u94fe\u63a5\u5668\u5c06<code>.data<\/code>\u8f93\u51fa\u6bb5\u653e\u7f6e\u5728\u5730\u5740\u201c0x8000000\u201d\u5904\u3002\u94fe\u63a5\u5668\u653e\u7f6e<code>.data<\/code>\u8f93\u51fa\u6bb5\u540e\uff0c\u4f4d\u7f6e\u8ba1\u6570\u5668\u7684\u503c\u5c06\u4e3a\u201c0x8000000\u201d\u52a0\u4e0a<code>.data<\/code>\u8f93\u51fa\u6bb5\u7684\u5927\u5c0f\u3002\u5176\u6548\u679c\u662f\u94fe\u63a5\u5668\u5c06\u628a<code>.bss<\/code>\u8f93\u51fa\u6bb5\u653e\u5728\u5185\u5b58\u4e2d<code>.data<\/code>\u8f93\u51fa\u6bb5\u4e4b\u540e\u3002<\/p>\n<p>\u94fe\u63a5\u5668\u5c06\u901a\u8fc7\u5fc5\u8981\u65f6\u589e\u52a0\u4f4d\u7f6e\u8ba1\u6570\u5668\u7684\u65b9\u5f0f\u786e\u4fdd\u6bcf\u4e2a\u8f93\u51fa\u6bb5\u5177\u6709\u6240\u9700\u7684\u5bf9\u9f50\u65b9\u5f0f\u3002\u5728\u6b64\u793a\u4f8b\u4e2d\uff0c<code>.text<\/code>\u548c<code>.data<\/code>\u6bb5\u7684\u6307\u5b9a\u5730\u5740\u53ef\u80fd\u4f1a\u6ee1\u8db3\u4efb\u4f55\u5bf9\u9f50\u7ea6\u675f\uff0c\u4f46\u94fe\u63a5\u5668\u53ef\u80fd\u5fc5\u987b\u5728<code>.data<\/code>\u548c<code>.bss<\/code>\u6bb5\u4e4b\u95f4\u521b\u5efa\u4e00\u4e2a\u5c0f\u95f4\u9699\u3002<\/p>\n<p>\u5c31\u8fd9\u6837\uff01\u8fd9\u662f\u4e00\u4e2a\u7b80\u5355\u800c\u5b8c\u6574\u7684\u94fe\u63a5\u5668\u811a\u672c\u3002<\/p>\n<h3>3.4\u7b80\u5355\u94fe\u63a5\u5668\u811a\u672c\u547d\u4ee4<\/h3>\n<p>\u5728\u672c\u6bb5\u4e2d\uff0c\u6211\u4eec\u5c06\u4ecb\u7ecd\u7b80\u5355\u7684\u94fe\u63a5\u5668\u811a\u672c\u547d\u4ee4\u3002<\/p>\n<h4>3.4.1\u8bbe\u7f6e\u5165\u53e3\u70b9<\/h4>\n<p>\u5728\u7a0b\u5e8f\u4e2d\u6267\u884c\u7684\u7b2c\u4e00\u6761\u6307\u4ee4\u79f0\u4e3a\u5165\u53e3\u70b9\u3002\u60a8\u53ef\u4ee5\u4f7f\u7528ENTRY\u94fe\u63a5\u811a\u672c\u547d\u4ee4\u8bbe\u7f6e\u5165\u53e3\u70b9\u3002\u53c2\u6570\u662f\u4e00\u4e2a\u7b26\u53f7\u540d\uff1a<\/p>\n<p><code>ENTRY(symbol)<\/code><\/p>\n<p>\u6709\u51e0\u79cd\u65b9\u6cd5\u53ef\u4ee5\u8bbe\u7f6e\u5165\u53e3\u70b9\u3002\u94fe\u63a5\u5668\u5c06\u901a\u8fc7\u6309\u987a\u5e8f\u5c1d\u8bd5\u4ee5\u4e0b\u6bcf\u4e2a\u65b9\u6cd5\u5e76\u5728\u5176\u4e2d\u4e00\u4e2a\u6210\u529f\u65f6\u505c\u6b62\u6765\u8bbe\u7f6e\u5165\u53e3\u70b9\uff1a<\/p>\n<ul>\n<li>'-e'\u8f93\u5165\u547d\u4ee4\u884c\u9009\u9879\uff1b<\/li>\n<li>\u94fe\u63a5\u5668\u811a\u672c\u4e2d\u7684ENTRY\uff08symbol\uff09\u547d\u4ee4\uff1b<\/li>\n<li>\u7b26\u53f7<code>start<\/code>\u7684\u503c\uff08\u5982\u679c\u5df2\u5b9a\u4e49\u7684\u8bdd\uff09\uff1b<\/li>\n<li>\u201c.text\u201d\u6bb5\u7b2c\u4e00\u4e2a\u5b57\u8282\u7684\u5730\u5740\uff08\u5982\u679c\u5b58\u5728\u7684\u8bdd\uff09\uff1b<\/li>\n<li>\u5730\u57400\u3002<\/li>\n<\/ul>\n<h4>3.4.2\u5904\u7406\u6587\u4ef6\u7684\u547d\u4ee4<\/h4>\n<p>\u51e0\u4e2a\u5904\u7406\u6587\u4ef6\u7684\u94fe\u63a5\u5668\u811a\u672c\u547d\u4ee4\u3002<\/p>\n<ul>\n<li>\n<p><strong>INCLUDE filename<\/strong><\/p>\n<p>\u5728\u6b64\u5904<strong>\u5305\u542b<\/strong>\u94fe\u63a5\u5668\u811a\u672c\u7684\u6587\u4ef6\u540d\u3002\u5c06\u5728\u5f53\u524d\u76ee\u5f55\u4ee5\u53ca\u4f7f\u7528'-L'\u9009\u9879\u6307\u5b9a\u7684\u4efb\u4f55\u76ee\u5f55\u4e2d\u641c\u7d22\u8be5\u6587\u4ef6\u3002\u60a8\u53ef\u4ee5\u5d4c\u5957\u8c03\u7528\u4ee5INCLUDE\u591a\u8fbe10\u4e2a\u7ea7\u522b\u7684\u6df1\u5ea6\u3002<\/p>\n<p>\u60a8\u53ef\u4ee5\u5c06INCLUDE\u6307\u4ee4\u653e\u5728<strong>\u9876\u5c42<\/strong>\uff0c\u5728<strong>MEMORY<\/strong>\u6216\u5206<strong>SECTIONS<\/strong>\u547d\u4ee4\u4e2d\uff0c\u6216\u653e\u5728<strong>\u8f93\u51fa\u6bb5\u63cf\u8ff0<\/strong>\u4e2d\u3002<\/p>\n<\/li>\n<li>\n<p><strong>INPUT(file, file, ...)<\/strong> <\/p>\n<p><strong>INPUT(file file ...)<\/strong><\/p>\n<p>INPUT\u547d\u4ee4\u6307\u793a\u94fe\u63a5\u5668\u5728\u94fe\u63a5\u4e2d\u5305\u542b\u5df2\u547d\u540d\u6587\u4ef6\uff0c\u5c31\u50cf\u5b83\u4eec\u662f\u5728\u547d\u4ee4\u884c\u4e2d\u547d\u540d\u7684\u4e00\u6837\u3002<\/p>\n<p>\u4f8b\u5982\uff0c\u5982\u679c\u60a8\u5e0c\u671b\u5728\u6bcf\u6b21\u94fe\u63a5\u65f6\u5305\u542b'subr.o'\uff0c\u4f46\u53c8\u4e0d\u60f3\u9ebb\u70e6\u5c06\u5176\u653e\u5728\u6bcf\u4e2a\u94fe\u63a5\u547d\u4ee4\u884c\u4e0a\uff0c\u90a3\u4e48\u60a8\u53ef\u4ee5\u5728\u94fe\u63a5\u5668\u811a\u672c\u4e2d\u6dfb\u52a0'INPUT\uff08subr.o\uff09'\u3002<\/p>\n<p>\u4e8b\u5b9e\u4e0a\uff0c\u5982\u679c\u613f\u610f\uff0c\u53ef\u4ee5\u5728\u94fe\u63a5\u5668\u811a\u672c\u4e2d\u5217\u51fa\u6240\u6709\u8f93\u5165\u6587\u4ef6\uff0c\u7136\u540e\u53ea\u4f7f\u7528\u201c-T\u201d\u9009\u9879\u8c03\u7528\u94fe\u63a5\u5668\u3002<\/p>\n<p>\u5982\u679c\u914d\u7f6e\u4e86sysroot\u524d\u7f00\uff0c\u5e76\u4e14\u6587\u4ef6\u540d\u4ee5\u201c\/\u201d\u5b57\u7b26\u5f00\u5934\uff0c\u5e76\u4e14\u6b63\u5728\u5904\u7406\u7684\u811a\u672c\u4f4d\u4e8esysroot\u524d\u7f00\u5185\uff0c\u5219\u5c06\u5728sysroot\u524d\u7f00\u4e2d\u67e5\u627e\u6587\u4ef6\u540d\u3002\u5426\u5219\uff0c\u94fe\u63a5\u5668\u5c06\u5c1d\u8bd5\u6253\u5f00\u5f53\u524d\u76ee\u5f55\u4e2d\u7684\u6587\u4ef6\u3002\u5982\u679c\u672a\u627e\u5230\uff0c\u94fe\u63a5\u5668\u5c06\u901a\u8fc7\u5b58\u6863\u5e93\u641c\u7d22\u8def\u5f84\u8fdb\u884c\u641c\u7d22\u3002<\/p>\n<p>\u5982\u679c\u4f7f\u7528\u201cINPUT\uff08-lfile\uff09\u201d\uff0cld\u5c06\u628a\u540d\u79f0\u8f6c\u6362\u4e3alibfile.a\uff0c\u5c31\u50cf\u547d\u4ee4\u884c\u53c2\u6570'-l'\u4e00\u6837\u3002<\/p>\n<p>\u5728\u9690\u5f0f\u94fe\u63a5\u5668\u811a\u672c\u4e2d\u4f7f\u7528INPUT\u547d\u4ee4\u65f6\uff0c\u6587\u4ef6\u5c06\u5305\u542b\u5728\u94fe\u63a5\u5668\u811a\u672c\u6587\u4ef6\u5305\u542b\u70b9\u5904\u7684\u94fe\u63a5\u4e2d\u3002\u8fd9\u53ef\u80fd\u4f1a\u5f71\u54cd\u5b58\u6863\u641c\u7d22\u3002<\/p>\n<\/li>\n<li>\n<p><strong>GROUP(file, file, ...)<\/strong> <\/p>\n<p><strong>GROUP(file file ...)<\/strong><\/p>\n<p>GROUP\u547d\u4ee4\u4e0eINPUT\u7c7b\u4f3c\uff0c\u53ea\u662f\u547d\u540d\u7684\u6587\u4ef6\u90fd\u5e94\u8be5\u662f<strong>\u5f52\u6863\u6587\u4ef6<\/strong>\uff0c\u5e76\u4e14\u91cd\u590d\u641c\u7d22\u5b83\u4eec\uff0c\u76f4\u5230\u6ca1\u6709\u521b\u5efa\u65b0\u7684\u672a\u5b9a\u4e49\u5f15\u7528\u4e3a\u6b62\u3002<\/p>\n<\/li>\n<li>\n<p><strong>AS_NEEDED(file, file, ...)<\/strong> <\/p>\n<p><strong>AS_NEEDED(file file ...)<\/strong><\/p>\n<p>\u6b64\u6784\u9020\u53ea\u80fd\u51fa\u73b0\u5728\u5176\u4ed6\u6587\u4ef6\u540d\u4e2d\u7684<strong>INPUT<\/strong>\u6216<strong>GROUP<\/strong>\u547d\u4ee4\u4e2d\u3002\u5217\u51fa\u7684\u6587\u4ef6\u5c06\u88ab\u5904\u7406\uff0c\u5c31\u50cf\u5b83\u4eec\u76f4\u63a5\u51fa\u73b0\u5728<strong>INPUT<\/strong>\u6216<strong>GROUP<\/strong>\u547d\u4ee4\u4e2d\u4e00\u6837\uff0cELF\u5171\u4eab\u5e93\u9664\u5916\uff0c\u53ea\u6709\u5728\u5b9e\u9645\u9700\u8981\u65f6\u624d\u4f1a\u6dfb\u52a0\u3002\u6b64\u6784\u9020\u5b9e\u8d28\u4e0a\u4e3a\u5176\u4e2d\u5217\u51fa\u7684\u6240\u6709\u6587\u4ef6\u542f\u7528\u4e86\u201c--as needed\u201d\u9009\u9879\uff0c\u5e76\u6839\u636e\u9700\u8981\u6062\u590d\u4ee5\u524d\u7684<code>\u2018--as-needed\u2019<\/code>\u548c<code>\u2018--no-as-needed\u2019<\/code>\u8bbe\u7f6e\u3002<\/p>\n<\/li>\n<li>\n<p><strong>OUTPUT(filename)<\/strong><\/p>\n<p>\u8f93\u51fa\u547d\u4ee4\u547d\u540d\u8f93\u51fa\u6587\u4ef6\u3002\u5728\u94fe\u63a5\u5668\u811a\u672c\u4e2d\u4f7f\u7528\u8f93\u51fa\uff08\u6587\u4ef6\u540d\uff09\u4e0e\u5728\u547d\u4ee4\u884c\u4e2d\u4f7f\u7528\u201c-o\u6587\u4ef6\u540d\u201d\u5b8c\u5168\u76f8\u540c\u3002\u5982\u679c\u4e24\u8005\u90fd\u4f7f\u7528\uff0c\u5219\u547d\u4ee4\u884c\u9009\u9879\u4f18\u5148\u3002<\/p>\n<p>\u60a8\u53ef\u4ee5\u4f7f\u7528OUTPUT\u547d\u4ee4\u4e3a\u8f93\u51fa\u6587\u4ef6\u5b9a\u4e49\u9ed8\u8ba4\u540d\u79f0\uff0c\u800c\u4e0d\u662f\u901a\u5e38\u7684\u9ed8\u8ba4\u540d\u79f0\u201ca.out\u201d\u3002<\/p>\n<\/li>\n<li>\n<p><strong>SEARCH_DIR(path)<\/strong><\/p>\n<p>SEARCH_DIR\u547d\u4ee4\u5c06path\u6dfb\u52a0\u5230ld\u67e5\u627e\u5f52\u6863\u5e93\u7684\u8def\u5f84\u5217\u8868\u4e2d\u3002\u4f7f\u7528SEARCH_DIR\uff08path\uff09\u4e0e\u5728\u547d\u4ee4\u884c\u4e0a\u4f7f\u7528'-L path'\u5b8c\u5168\u76f8\u540c\u3002\u5982\u679c\u4e24\u8005\u90fd\u4f7f\u7528\uff0c\u5219\u94fe\u63a5\u5668\u5c06\u641c\u7d22\u4e24\u6761\u8def\u5f84\u3002\u9996\u5148\u641c\u7d22\u4f7f\u7528\u547d\u4ee4\u884c\u9009\u9879\u6307\u5b9a\u7684\u8def\u5f84\u3002<\/p>\n<\/li>\n<li>\n<p><strong>STARTUP(filename)<\/strong><\/p>\n<p>STARTUP\u547d\u4ee4\u4e0eINPUT\u547d\u4ee4\u7c7b\u4f3c\uff0c\u53ea\u662ffilename\u5c06\u6210\u4e3a\u8981\u94fe\u63a5\u7684\u7b2c\u4e00\u4e2a\u8f93\u5165\u6587\u4ef6\uff0c\u5c31\u597d\u50cf\u5b83\u662f\u5728\u547d\u4ee4\u884c\u4e0a\u9996\u5148\u6307\u5b9a\u7684\u4e00\u6837\u3002\u5728\u4f7f\u7528\u5165\u53e3\u70b9\u59cb\u7ec8\u662f\u7b2c\u4e00\u4e2a\u6587\u4ef6\u5f00\u5934\u7684\u7cfb\u7edf\u65f6\uff0c\u8fd9\u53ef\u80fd\u5f88\u6709\u7528\u3002<\/p>\n<\/li>\n<\/ul>\n<hr \/>\n<p>...<\/p>\n<hr \/>\n<h4>3.4.4\u4e3a\u5185\u5b58\u533a\u57df\u5206\u914d\u522b\u540d<\/h4>\n<p>\u522b\u540d\u53ef\u4ee5\u6dfb\u52a0\u5230\u4f7f\u7528<strong>MEMORY<\/strong>\u547d\u4ee4\u521b\u5efa\u7684\u73b0\u6709\u5185\u5b58\u533a\u57df\u4e2d\u3002\u6bcf\u4e2a\u540d\u79f0\u6700\u591a\u5bf9\u5e94\u4e00\u4e2a\u5185\u5b58\u533a\u57df\u3002<\/p>\n<p>\u200b   <code>REGION_ALIAS(alias, region)<\/code><\/p>\n<p><strong>REGION_ALIAS<\/strong>\u51fd\u6570\u4e3a\u5185\u5b58\u533a\u57df<em>region<\/em>\u521b\u5efa\u522b\u540d\u3002\u8fd9\u5141\u8bb8\u5c06\u8f93\u51fa\u6bb5\u7075\u6d3b\u5730\u6620\u5c04\u5230\u5185\u5b58\u533a\u57df\u3002\u4e0b\u9762\u662f\u4e00\u4e2a\u4f8b\u5b50\u3002<\/p>\n<p>\u5047\u8bbe\u6211\u4eec\u6709\u4e00\u4e2a\u5e94\u7528\u4e8e\u5404\u79cd\u5185\u5b58\u5b58\u50a8\u8bbe\u5907\u7684\u5d4c\u5165\u5f0f\u7cfb\u7edf\u3002\u6240\u6709\u8fd9\u4e9b\u90fd\u5177\u6709\u901a\u7528\uff0c\u6613\u5931\u6027\u5b58\u50a8\u5668RAM\uff0c\u5141\u8bb8\u4ee3\u7801\u6267\u884c\u6216\u6570\u636e\u5b58\u50a8\u3002\u6709\u4e9b\u53ef\u80fd\u5177\u6709\u5141\u8bb8\u4ee3\u7801\u6267\u884c\u548c\u53ea\u8bfb\u6570\u636e\u8bbf\u95ee\u7684\u53ea\u8bfb\u7684\u975e\u6613\u5931\u6027\u5b58\u50a8\u5668ROM\u3002\u6700\u540e\u4e00\u4e2a\u53d8\u4f53\u662f\u4e00\u4e2a\u53ea\u8bfb\u7684\u975e\u6613\u5931\u6027\u5b58\u50a8\u5668ROM2\uff0c\u5177\u6709\u53ea\u8bfb\u6570\u636e\u8bbf\u95ee\uff0c\u6ca1\u6709\u4ee3\u7801\u6267\u884c\u80fd\u529b\u3002\u6211\u4eec\u6709\u56db\u4e2a\u8f93\u51fa\u6bb5\uff1a<\/p>\n<ul>\n<li>.text         \u7a0b\u5e8f\u4ee3\u7801;<\/li>\n<li>.rodata    \u53ea\u8bfb\u5df2\u521d\u59cb\u5316\u6570\u636e;<\/li>\n<li>.data        \u8bfb\u5199\u5df2\u521d\u59cb\u5316\u6570\u636e;<\/li>\n<li>.bss          \u8bfb\u5199\u96f6\u521d\u59cb\u5316\u6570\u636e;<\/li>\n<\/ul>\n<p>\u76ee\u6807\u662f\u63d0\u4f9b\u4e00\u4e2a\u94fe\u63a5\u5668\u547d\u4ee4\u6587\u4ef6\uff0c\u5176\u4e2d\u5305\u542b\u5b9a\u4e49\u8f93\u51fa\u90e8\u5206\u7684\u7cfb\u7edf\u72ec\u7acb\u90e8\u5206\u548c\u5c06\u8f93\u51fa\u90e8\u5206\u6620\u5c04\u5230\u7cfb\u7edf\u4e0a\u53ef\u7528\u5185\u5b58\u533a\u57df\u7684\u7cfb\u7edf\u4f9d\u8d56\u90e8\u5206\u3002\u6211\u4eec\u7684\u5d4c\u5165\u5f0f\u7cfb\u7edf\u5177\u6709\u4e09\u79cd\u4e0d\u540c\u7684\u5185\u5b58\u8bbe\u7f6eA\u3001B\u548cC\uff1a<\/p>\n<table>\n<thead>\n<tr>\n<th style=\"text-align: center;\">Section<\/th>\n<th style=\"text-align: center;\">Variant A<\/th>\n<th style=\"text-align: center;\">Variant B<\/th>\n<th style=\"text-align: center;\">Variant C<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td style=\"text-align: center;\">.text<\/td>\n<td style=\"text-align: center;\">RAM<\/td>\n<td style=\"text-align: center;\">ROM<\/td>\n<td style=\"text-align: center;\">ROM<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: center;\">.rodata<\/td>\n<td style=\"text-align: center;\">RAM<\/td>\n<td style=\"text-align: center;\">ROM<\/td>\n<td style=\"text-align: center;\">ROM2<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: center;\">.data<\/td>\n<td style=\"text-align: center;\">RAM<\/td>\n<td style=\"text-align: center;\">RAM\/ROM<\/td>\n<td style=\"text-align: center;\">RAM\/ROM2<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: center;\">.bss<\/td>\n<td style=\"text-align: center;\">RAM<\/td>\n<td style=\"text-align: center;\">RAM<\/td>\n<td style=\"text-align: center;\">RAM<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>\u7b26\u53f7RAM\/ROM\u6216RAM\/ROM2\u8868\u793a\u8be5\u90e8\u5206\u5206\u522b\u52a0\u8f7d\u5230\u533a\u57dfROM\u6216ROM2\u4e2d\u3002\u8bf7\u6ce8\u610f\u4e09\u79cd\u53d8\u4f53\u4e2d<code>.data<\/code>\u6bb5\u7684\u52a0\u8f7d\u5730\u5740\u5747\u4f4d\u4e8e<code>.rodata<\/code>\u6bb5\u4e4b\u540e\u3002<\/p>\n<p>\u4e0b\u9762\u662f\u5904\u7406\u8f93\u51fa\u6bb5\u7684\u57fa\u672c\u94fe\u63a5\u5668\u811a\u672c\u3002\u5b83\u5305\u542b\u4e86\u63cf\u8ff0\u5185\u5b58\u5e03\u5c40\u7684\u7cfb\u7edf\u4f9d\u8d56\u6587\u4ef6<strong>linkcmds.memory<\/strong>\uff1a<\/p>\n<pre><code class=\"language-linkerscript\">INCLUDE linkcmds.memory\n\nSECTIONS {\n    .text : {\n            *(.text)\n        } &gt; REGION_TEXT \n    .rodata : {\n            *(.rodata) \n            rodata_end = .; \n        } &gt; REGION_RODATA\n    .data : AT (rodata_end) {\n            data_start = .; \n            *(.data)\n        } &gt; REGION_DATA \n    data_size = SIZEOF(.data); \n    data_load_start = LOADADDR(.data); \n    .bss : {\n            *(.bss) \n        } &gt; REGION_BSS \n}<\/code><\/pre>\n<p>\u73b0\u5728\u6211\u4eec\u9700\u8981\u4e09\u4e2a\u4e0d\u540c\u7684linkcmds.memory\u6587\u4ef6\u6765\u5b9a\u4e49\u5185\u5b58\u533a\u57df\u548c\u522b\u540d\u540d\u79f0\u3002\u4ee5\u4e0b\u662f\u9488\u5bf9\u5206\u522b\u4e09\u79cd\u53d8\u4f53A\u3001B\u548cC\u7684\u4e0d\u540c\u7684<strong>linkcmds.memory<\/strong>\u7684\u5185\u5bb9\uff1a<\/p>\n<ul>\n<li>\n<p><strong>A<\/strong> \u8fd9\u79cd\u65b9\u5f0f\u4e2d\u6240\u6709\u4e1c\u897f\u5168\u90e8\u8fdb\u5165\u5230RAM\u4e2d\u3002<\/p>\n<pre><code class=\"language-linkerscript\">MEMORY {\n  RAM : ORIGIN = 0, LENGTH = 4M \n}\n\nREGION_ALIAS(\"REGION_TEXT\", RAM); \nREGION_ALIAS(\"REGION_RODATA\", RAM); \nREGION_ALIAS(\"REGION_DATA\", RAM); \nREGION_ALIAS(\"REGION_BSS\", RAM);<\/code><\/pre>\n<\/li>\n<li>\n<p><strong>B<\/strong>    \u7a0b\u5e8f\u4ee3\u7801\u548c\u53ea\u8bfb\u6570\u636e\u8fdb\u5165ROM\u3002\u8bfb\u5199\u6570\u636e\u8fdb\u5165RAM\u3002\u521d\u59cb\u5316\u6570\u636e\u7684\u955c\u50cf\u52a0\u8f7d\u5230ROM\u4e2d\uff0c\u5e76\u5c06\u5728\u7cfb\u7edf\u542f\u52a8\u671f\u95f4\u590d\u5236\u5230RAM\u4e2d\u3002<\/p>\n<pre><code class=\"language-linkerscript\">MEMORY {\n  ROM : ORIGIN = 0, LENGTH = 3M \n  RAM : ORIGIN = 0x10000000, LENGTH = 1M\n}\n\nREGION_ALIAS(\"REGION_TEXT\", ROM); \nREGION_ALIAS(\"REGION_RODATA\", ROM); \nREGION_ALIAS(\"REGION_DATA\", RAM); \nREGION_ALIAS(\"REGION_BSS\", RAM);<\/code><\/pre>\n<\/li>\n<li>\n<p><strong>C<\/strong>    \u7a0b\u5e8f\u4ee3\u7801\u8fdb\u5165ROM\u3002\u53ea\u8bfb\u6570\u636e\u8fdb\u5165ROM 2\u3002\u8bfb\u5199\u6570\u636e\u8fdb\u5165RAM\u3002\u521d\u59cb\u5316\u6570\u636e\u7684\u6620\u50cf\u52a0\u8f7d\u5230ROM 2\u4e2d\uff0c\u5e76\u5728\u7cfb\u7edf\u542f\u52a8\u671f\u95f4\u590d\u5236\u5230RAM\u4e2d\u3002<\/p>\n<pre><code class=\"language-linkerscript\">MEMORY {\n  ROM : ORIGIN = 0, LENGTH = 2M \n  ROM2 : ORIGIN = 0x10000000, LENGTH = 1M \n  RAM : ORIGIN = 0x20000000, LENGTH = 1M\n}\n\nREGION_ALIAS(\"REGION_TEXT\", ROM); \nREGION_ALIAS(\"REGION_RODATA\", ROM2); \nREGION_ALIAS(\"REGION_DATA\", RAM); \nREGION_ALIAS(\"REGION_BSS\", RAM);<\/code><\/pre>\n<\/li>\n<\/ul>\n<p>\u5982\u679c\u9700\u8981\uff0c\u53ef\u4ee5\u7f16\u5199\u516c\u5171\u7cfb\u7edf\u521d\u59cb\u5316\u4f8b\u7a0b\u4ee5\u5c06\u6765\u81eaROM\u6216ROM2\u7684.data\u90e8\u5206\u590d\u5236\u5230RAM\u4e2d\uff1a<\/p>\n<pre><code class=\"language-C\">#include &lt;string.h&gt;\n\nextern char data_start []; \nextern char data_size []; \nextern char data_load_start [];\n\nvoid copy_data(void) {\n    if (data_start != data_load_start) {\n        memcpy(data_start, data_load_start, (size_t) data_size); \n    }\n}<\/code><\/pre>\n<hr \/>\n<p>...<\/p>\n<hr \/>\n<h3>3.6\u6bb5\u547d\u4ee4<\/h3>\n<p><strong>SECTIONS<\/strong>\u547d\u4ee4\u544a\u8bc9\u94fe\u63a5\u5668\u5982\u4f55\u5c06\u8f93\u5165\u6bb5\u6620\u5c04\u5230\u8f93\u51fa\u6bb5\uff0c\u4ee5\u53ca\u5982\u4f55\u5c06\u8f93\u51fa\u6bb5\u653e\u7f6e\u5728\u5185\u5b58\u4e2d\u3002<\/p>\n<p>\u201cSECTIONS\u201d\u547d\u4ee4\u7684\u683c\u5f0f\u4e3a\uff1a<\/p>\n<pre><code class=\"language-linkerscript\">SECTIONS {\n    sections-command \n    sections-command \n    ...\n}<\/code><\/pre>\n<p>\u6bcf\u4e2a\u533a\u6bb5\u547d\u4ee4\u53ef\u4ee5\u662f\u4ee5\u4e0b\u547d\u4ee4\u4e4b\u4e00\uff1a<\/p>\n<ul>\n<li>\u4e00\u4e2aENTRY\u547d\u4ee4<\/li>\n<li>\u7b26\u53f7\u8d4b\u503c<\/li>\n<li>\u8f93\u51fa\u90e8\u5206\u63cf\u8ff0<\/li>\n<li>\u8986\u76d6\u63cf\u8ff0<\/li>\n<\/ul>\n<p>\u4e3a\u4e86\u65b9\u4fbf\u5728\u8fd9\u4e9b\u547d\u4ee4\u4e2d\u4f7f\u7528\u4f4d\u7f6e\u8ba1\u6570\u5668\uff0c\u5141\u8bb8\u5728SECTIONS\u547d\u4ee4\u4e2d\u6307\u5b9aENTRY\u547d\u4ee4\u548c\u7b26\u53f7\u3002\u8fd9\u8fd8\u53ef\u4ee5\u4f7f\u94fe\u63a5\u5668\u811a\u672c\u66f4\u5bb9\u6613\u7406\u89e3\uff0c\u56e0\u4e3a\u60a8\u53ef\u4ee5\u5728\u8f93\u51fa\u6587\u4ef6\u5e03\u5c40\u4e2d\u6709\u610f\u4e49\u7684\u4f4d\u7f6e\u4f7f\u7528\u8fd9\u4e9b\u547d\u4ee4\u3002<\/p>\n<p>\u8f93\u51fa\u90e8\u5206\u63cf\u8ff0\u548c\u8986\u76d6\u63cf\u8ff0\u5982\u4e0b\u6240\u8ff0\u3002<\/p>\n<p>\u5982\u679c\u5728\u94fe\u63a5\u5668\u811a\u672c\u4e2d\u4e0d\u4f7f\u7528<strong>SECTIONS<\/strong>\u547d\u4ee4\uff0c\u94fe\u63a5\u5668\u5c06\u6309\u7167\u5728\u8f93\u5165\u6587\u4ef6\u4e2d\u9996\u5148\u9047\u5230\u7684\u987a\u5e8f\uff0c\u5c06\u6bcf\u4e2a\u8f93\u5165\u6bb5\u653e\u5165\u5177\u6709\u76f8\u540c\u540d\u79f0\u7684\u8f93\u51fa\u6bb5\u4e2d\u3002\u4f8b\u5982\uff0c\u5982\u679c\u7b2c\u4e00\u4e2a\u6587\u4ef6\u4e2d\u5b58\u5728\u6240\u6709\u8f93\u5165\u6bb5\uff0c\u5219\u8f93\u51fa\u6587\u4ef6\u4e2d\u6bb5\u7684\u987a\u5e8f\u5c06\u4e0e\u7b2c\u4e00\u4e2a\u8f93\u5165\u6587\u4ef6\u4e2d\u7684\u987a\u5e8f\u5339\u914d\u3002\u7b2c\u4e00\u90e8\u5206\u5c06\u4f4d\u4e8e\u5730\u57400\u5904\u3002<\/p>\n<h4>3.6.1\u8f93\u51fa\u6bb5\u8bf4\u660e<\/h4>\n<p>\u8f93\u51fa\u6bb5\u7684\u5b8c\u6574\u63cf\u8ff0\u5982\u4e0b\u6240\u793a\uff1a<\/p>\n<pre><code class=\"language-linkerscript\">section [address] [(type)] : \n    [AT(lma)] \n    [ALIGN(section_align)] \n    [SUBALIGN(subsection_align)] \n    [constraint] {\n        output-section-command \n        output-section-command \n        ...\n    } [&gt;region] [AT&gt;lma_region] [:phdr :phdr ...][=fillexp]<\/code><\/pre>\n<p>\u5927\u591a\u6570\u8f93\u51fa\u6bb5\u4e0d\u4f7f\u7528\u5927\u591a\u6570\u53ef\u9009\u7684\u6bb5\u5c5e\u6027\u3002<\/p>\n<p>\u6bb5\u5468\u56f4\u7684\u7a7a\u683c\u662f<strong>\u5fc5\u8981\u7684<\/strong>\uff0c\u4ee5\u4fbf\u6bb5\u540d\u79f0\u660e\u786e\u65e0\u8bef\u3002\u5192\u53f7\u548c\u5927\u62ec\u53f7\u4e5f\u662f\u5fc5\u9700\u7684\u3002\u6362\u884c\u7b26\u548c\u5176\u4ed6\u7a7a\u767d\u662f\u53ef\u9009\u7684\u3002<\/p>\n<p>\u6bcf\u4e2a output-section-command \u53ef\u4ee5\u662f\u4ee5\u4e0b\u547d\u4ee4\u4e4b\u4e00:<\/p>\n<ul>\n<li>\u4e00\u4e2a\u7b26\u53f7\u8d4b\u503c<\/li>\n<li>\u8f93\u5165\u90e8\u5206\u63cf\u8ff0<\/li>\n<li>\u76f4\u63a5\u5305\u542b\u7684\u6570\u636e\u503c<\/li>\n<li>\u4e00\u4e2a\u7279\u6b8a\u7684\u8f93\u51fa\u6bb5\u5173\u952e\u5b57<\/li>\n<\/ul>\n<h4>3.6.2\u8f93\u51fa\u6bb5\u540d\u79f0<\/h4>\n<p>\u8f93\u51fa\u6bb5\u7684\u540d\u79f0\u4e3a\u6bb5\u3002\u6bb5\u5fc5\u987b\u6ee1\u8db3<strong>\u8f93\u51fa\u683c\u5f0f<\/strong>\u7684\u7ea6\u675f\u3002\u5728\u4ec5\u652f\u6301\u6709\u9650\u6570\u91cf\u6bb5\u7684\u683c\u5f0f\u4e2d\uff0c\u4f8b\u5982a.out\uff0c\u540d\u79f0\u5fc5\u987b\u662f\u8be5\u683c\u5f0f\u6240\u652f\u6301\u7684\u540d\u79f0\u4e4b\u4e00\uff08\u4f8b\u5982\uff0ca.out\u4ec5\u5141\u8bb8<code>.text<\/code>\u3001<code>.data<\/code>\u6216<code>.bss<\/code>\uff09\u3002\u5982\u679c\u8f93\u51fa\u683c\u5f0f\u652f\u6301\u4efb\u610f\u6570\u91cf\u7684\u6bb5\uff0c\u4f46\u5e26\u6709\u6570\u5b57\u800c\u4e0d\u662f\u540d\u79f0\uff08\u4e0eOasys\u7684\u60c5\u51b5\u76f8\u540c\uff09\uff0c\u5219\u5e94\u5c06\u540d\u79f0\u4f5c\u4e3a\u5e26\u5f15\u53f7\u7684\u6570\u5b57\u5b57\u7b26\u4e32\u63d0\u4f9b\u3002\u6bb5\u540d\u53ef\u4ee5\u7531\u4efb\u4f55\u5b57\u7b26\u5e8f\u5217\u7ec4\u6210\uff0c\u4f46\u5305\u542b\u4efb\u4f55\u5f02\u5e38\u5b57\u7b26\uff08\u5982\u9017\u53f7\uff09\u7684\u540d\u79f0\u5fc5\u987b\u52a0\u5f15\u53f7\u3002<\/p>\n<p>\u8f93\u51fa\u6bb5\u540d\u79f0\u201c\/DISCARD\/\u201d\u662f\u7279\u6b8a\u7684\uff1b<\/p>\n<h4>3.6.3\u8f93\u51fa\u6bb5\u5730\u5740<\/h4>\n<p>\u8be5\u5730\u5740\u662f<strong>\u8f93\u51fa\u90e8\u5206\u7684VMA<\/strong>\uff08\u865a\u62df\u5185\u5b58\u5730\u5740\uff09\u7684\u8868\u8fbe\u5f0f\u3002\u5982\u679c\u4e0d\u63d0\u4f9b\u5730\u5740\uff0c\u94fe\u63a5\u5668\u5c06\u6839\u636e<strong>region<\/strong>\uff08\u5982\u679c\u5b58\u5728\uff09\u6216\u4f4d\u7f6e\u8ba1\u6570\u5668\u7684\u5f53\u524d\u503c\u8bbe\u7f6e\u5730\u5740\u3002<\/p>\n<p>\u5982\u679c\u60a8\u63d0\u4f9b<strong>address<\/strong>\uff0c\u5219\u8f93\u51fa\u6bb5\u7684\u5730\u5740\u5c06\u7cbe\u786e\u8bbe\u7f6e\u4e3a\u8be5\u5730\u5740\u3002\u5982\u679c\u65e2\u4e0d\u63d0\u4f9b<strong>address<\/strong>\u4e5f\u4e0d\u63d0\u4f9b<strong>region<\/strong>\uff0c\u5219\u8f93\u51fa\u6bb5\u7684\u5730\u5740\u5c06\u8bbe\u7f6e\u4e3a\u4e0e\u8f93\u51fa\u6bb5\u7684\u5bf9\u9f50\u8981\u6c42\u5bf9\u9f50\u7684<strong>\u4f4d\u7f6e\u8ba1\u6570\u5668\u7684\u5f53\u524d\u503c<\/strong>\u3002\u8f93\u51fa\u6bb5\u7684\u5bf9\u9f50\u8981\u6c42\u662f\u8f93\u51fa\u6bb5\u4e2d\u5305\u542b\u7684\u4efb\u4f55\u8f93\u5165\u6bb5\u4e2d\u6700\u4e25\u683c\u7684\u5bf9\u9f50\u3002<\/p>\n<p>\u4f8b\u5982\uff1a<\/p>\n<p><code>.text . : { *(.text) }<\/code><\/p>\n<p>\u4ee5\u53ca<\/p>\n<p><code>.text : { *(.text) }<\/code><\/p>\n<p>\u4e24\u8005\u6709\u5fae\u5999\u7684\u4e0d\u540c\u3002\u7b2c\u4e00\u4e2a\u5c06\u201c.text\u201d\u7684\u8f93\u51fa\u6bb5\u8bbe\u7f6e\u4e3a\u4f4d\u7f6e\u8ba1\u6570\u5668\u7684\u5f53\u524d\u503c\u3002\u7b2c\u4e8c\u4e2a\u5c06\u5176\u8bbe\u7f6e\u4e3a\u4e0e\u201c.text\u201d\u7684\u8f93\u5165\u6bb5\u6700\u4e25\u683c\u5bf9\u9f50\u7684\u4f4d\u7f6e\u8ba1\u6570\u5668\u7684\u5f53\u524d\u503c\u3002<\/p>\n<p>address\u53ef\u4ee5\u662f\u4efb\u610f\u8868\u8fbe\u5f0f\uff1b\u4f8b\u5982\uff0c\u5982\u679c\u8981\u57280x10\u5b57\u6bb5\u8fb9\u754c\u4e0a\u5bf9\u9f50\u6bb5\uff0c\u4f7f\u6bb5\u5730\u5740\u7684\u6700\u4f4e\u56db\u4f4d\u4e3a\u96f6\uff0c\u5219\u53ef\u4ee5\u6267\u884c\u4ee5\u4e0b\u64cd\u4f5c\uff1a<\/p>\n<p><code>.text ALIGN(0x10) : { *(.text) }<\/code><\/p>\n<p>\u8fd9\u662f\u6b63\u786e\u7684\uff0c\u56e0\u4e3a<strong>ALIGN<\/strong>\u5c06\u5f53\u524d\u4f4d\u7f6e\u8ba1\u6570\u5668\u5411\u4e0a\u5bf9\u9f50\u5230\u6307\u5b9a\u7684\u503c\u3002<\/p>\n<p>\u6307\u5b9a\u6bb5\u7684<strong>address<\/strong>\u5c06\u66f4\u6539\u4f4d\u7f6e\u8ba1\u6570\u5668\u7684\u503c\uff0c\u524d\u63d0\u662f\u8be5\u6bb5\u4e3a\u975e\u7a7a\u3002\uff08\u5ffd\u7565\u7a7a\u6bb5\uff09\u3002<\/p>\n<h4>3.6.4\u8f93\u5165\u6bb5\u63cf\u8ff0<\/h4>\n<p>\u6700\u5e38\u89c1\u7684\u8f93\u51fa\u6bb5\u547d\u4ee4\u662f<strong>\u8f93\u5165\u6bb5\u63cf\u8ff0<\/strong>\u3002<\/p>\n<p>\u8f93\u5165\u6bb5\u63cf\u8ff0\u662f\u6700\u57fa\u672c\u7684\u94fe\u63a5\u5668\u811a\u672c\u64cd\u4f5c\u3002\u60a8\u4f7f\u7528\u8f93\u51fa\u6bb5\u544a\u8bc9\u94fe\u63a5\u5668\u5982\u4f55\u5728\u5185\u5b58\u4e2d\u5e03\u5c40\u7a0b\u5e8f\u3002\u60a8\u53ef\u4ee5\u4f7f\u7528\u8f93\u5165\u6bb5\u63cf\u8ff0\u6765\u544a\u8bc9\u94fe\u63a5\u5668\u5982\u4f55\u5c06\u8f93\u5165\u6587\u4ef6\u6620\u5c04\u5230\u5185\u5b58\u5e03\u5c40\u4e2d\u3002<\/p>\n<h5>3.6.4.1\u8f93\u5165\u6bb5\u57fa\u7840\u77e5\u8bc6<\/h5>\n<p>\u8f93\u5165\u6bb5\u63cf\u8ff0\u7531<strong>\u6587\u4ef6\u540d<\/strong>\uff08\u53ef\u9009\uff09\u548c\u62ec\u53f7\u4e2d\u7684<strong>\u6bb5\u540d\u5217\u8868<\/strong>\u7ec4\u6210\u3002<\/p>\n<p>\u6587\u4ef6\u540d\u548c\u6bb5\u540d\u53ef\u80fd\u662f\u901a\u914d\u7b26\u6a21\u5f0f\uff0c\u6211\u4eec\u5c06\u5728\u4e0b\u9762\u8fdb\u4e00\u6b65\u63cf\u8ff0\u3002<\/p>\n<p>\u6700\u5e38\u89c1\u7684\u8f93\u5165\u6bb5\u63cf\u8ff0\u662f\u5728\u8f93\u51fa\u6bb5\u4e2d\u5305\u542b\u5177\u6709\u7279\u5b9a\u540d\u79f0\u7684\u6240\u6709\u8f93\u5165\u6bb5\u3002\u4f8b\u5982\uff0c\u8981\u5305\u542b\u6240\u6709\u8f93\u5165<code>.text<\/code>\u90e8\u5206\uff0c\u60a8\u53ef\u4ee5\u5199\uff1a<\/p>\n<p><code>*(.text)<\/code><\/p>\n<p>\u6b64\u5904\u7684<code>*<\/code>\u662f\u4e0e\u4efb\u4f55\u6587\u4ef6\u540d\u5339\u914d\u7684\u901a\u914d\u7b26\u3002\u8981\u6392\u9664\u4e0e\u6587\u4ef6\u540d\u901a\u914d\u7b26\u5339\u914d\u7684\u6587\u4ef6\u5217\u8868\uff0c\u53ef\u4ee5\u4f7f\u7528<strong>EXCLUDE_FILE<\/strong>\u5339\u914d\u9664\u6392\u9664\u6587\u4ef6\u5217\u8868\u4e2d\u6307\u5b9a\u7684\u6587\u4ef6\u4e4b\u5916\u7684\u6240\u6709\u6587\u4ef6\u3002\u4f8b\u5982\uff1a<\/p>\n<p><code>*(EXCLUDE_FILE (*crtend.o *otherfile.o) .ctors)<\/code><\/p>\n<p>\u5c06\u5bfc\u81f4\u9664\u201ccrtend.o\u201d\u4ee5\u53ca&quot;otherfile.o&quot;\u4e4b\u5916\u7684\u6240\u6709\u6587\u4ef6\u4e2d\u7684<code>.ctors<\/code>\u6bb5\u88ab\u5305\u542b\u5728\u5185\u3002<\/p>\n<p>\u6709\u4e24\u79cd\u65b9\u6cd5\u53ef\u4ee5\u5305\u542b\u591a\u4e2a\u90e8\u5206\uff1a<\/p>\n<p><code>*(.text .rdata)<\/code> <\/p>\n<p><code>*(.text) *(.rdata)<\/code><\/p>\n<p>\u8fd9\u4e24\u8005\u4e4b\u95f4\u7684\u533a\u522b\u5728\u4e8e\u8f93\u5165\u6bb5<code>.text<\/code>\u548c<code>.rdata<\/code>\u5c06\u51fa\u73b0\u5728\u8f93\u51fa\u6bb5\u4e2d\u7684\u987a\u5e8f\u3002\u5728\u7b2c\u4e00\u4e2a\u793a\u4f8b\u4e2d\uff0c\u5b83\u4eec\u5c06\u6df7\u5408\u5728\u4e00\u8d77\uff0c\u51fa\u73b0\u7684\u987a\u5e8f\u4e0e\u5b83\u4eec\u88ab\u94fe\u63a5\u5668\u627e\u5230\u7684\u987a\u5e8f\u76f8\u540c\u3002\u5728\u7b2c\u4e8c\u4e2a\u4f8b\u5b50\u4e2d\uff0c\u6240\u6709\u7684<code>.text<\/code>\u8f93\u5165\u6bb5\u5c06\u9996\u5148\u51fa\u73b0\uff0c\u7136\u540e\u662f\u5168\u90e8<code>.rdata<\/code>\u7684\u8f93\u5165\u6bb5\u3002<\/p>\n<p>\u60a8\u53ef\u4ee5<strong>\u6307\u5b9a\u6587\u4ef6\u540d\u4ee5\u5305\u542b\u7279\u5b9a\u6587\u4ef6\u4e2d\u7684\u6bb5<\/strong>\u3002\u5982\u679c\u60a8\u7684\u4e00\u4e2a\u6216\u591a\u4e2a\u6587\u4ef6\u5305\u542b\u9700\u8981\u4f4d\u4e8e\u5185\u5b58\u4e2d\u7279\u5b9a\u4f4d\u7f6e\u7684\u7279\u6b8a\u6570\u636e\uff0c\u5219\u53ef\u4ee5\u6267\u884c\u6b64\u64cd\u4f5c\u3002\u4f8b\u5982\uff1a<\/p>\n<p><code>data.o(.data)<\/code><\/p>\n<p>\u60a8\u8fd8\u53ef\u4ee5\u5728\u5f52\u6863\u6587\u4ef6\u4e2d\u6307\u5b9a\u6587\u4ef6\uff0c\u65b9\u6cd5\u662f\u7f16\u5199\u4e0e\u5f52\u6863\u6587\u4ef6\u5339\u914d\u7684\u6a21\u5f0f\u3001\u5192\u53f7\uff0c\u7136\u540e\u7f16\u5199\u4e0e\u6587\u4ef6\u5339\u914d\u7684\u6a21\u5f0f\uff0c<strong>\u5192\u53f7\u5468\u56f4\u6ca1\u6709\u7a7a\u683c<\/strong>\u3002<\/p>\n<p>\u2018archive:file\u2019<\/p>\n<p>\u200b   \u5339\u914d\u5b58\u6863\u4e2d\u7684\u6587\u4ef6<\/p>\n<p>\u2018archive:\u2019 <\/p>\n<p>\u200b   \u5339\u914d\u6574\u4e2a\u6863\u6848<br \/>\n\u2018:file\u2019 <\/p>\n<p>\u200b   \u5339\u914d\u6587\u4ef6\uff0c\u4f46\u4e0d\u5339\u914d\u5b58\u6863\u4e2d\u7684\u90a3\u4e2a\u6587\u4ef6<\/p>\n<p>\u2018archive\u2019\u548c\u2018file\u2019\u4e2d\u7684\u4e00\u4e2a\u6216\u4e24\u4e2a\u90fd\u53ef\u4ee5\u5305\u542bshell\u901a\u914d\u7b26\u3002\u5728\u57fa\u4e8eDOS\u7684\u6587\u4ef6\u7cfb\u7edf\u4e2d\uff0c\u94fe\u63a5\u5668\u5c06\u5047\u5b9a\u4e00\u4e2a\u540e\u8ddf\u5192\u53f7\u7684\u5b57\u6bcd\u662f\u9a71\u52a8\u5668\u8bf4\u660e\u7b26\uff0c\u56e0\u6b64<code>c:myfile.o<\/code>\u662f\u4e00\u4e2a\u7b80\u5355\u7684\u6587\u4ef6\u89c4\u8303\uff0c\u800c\u4e0d\u662f\u4f4d\u4e8e\u540d\u4e3a\u201cc\u201d\u7684\u5b58\u6863\u4e2d\u7684<code>myfile.o<\/code>\u3002<code>archive:file<\/code>\u7684\u6587\u4ef6\u89c4\u8303\u4e5f\u53ef\u4ee5\u5728<strong>\u6392\u9664\u6587\u4ef6\u5217\u8868\uff08EXCLUDE_FILE\uff09<\/strong>\u4e2d\u4f7f\u7528\uff0c\u4f46\u53ef\u80fd\u4e0d\u4f1a\u51fa\u73b0\u5728\u5176\u4ed6\u94fe\u63a5\u811a\u672c\u7684\u4e0a\u4e0b\u6587\u4e2d\u3002\u4f8b\u5982\uff0c\u4e0d\u80fd\u901a\u8fc7\u5728<strong>INPUT<\/strong>\u547d\u4ee4\u4e2d\u4f7f\u7528\u201carchive:file\u201d\u4ece\u5b58\u6863\u4e2d\u63d0\u53d6\u6587\u4ef6\u3002<\/p>\n<p>\u5982\u679c\u60a8\u4f7f\u7528\u7684\u6587\u4ef6\u540d\u6ca1\u6709\u6bb5\u5217\u8868\uff0c\u5219\u8f93\u5165\u6587\u4ef6\u4e2d\u7684\u6240\u6709\u6bb5\u90fd\u5c06\u5305\u542b\u5728\u8f93\u51fa\u6bb5\u4e2d\u3002\u8fd9\u662f\u4e0d\u5e38\u89c1\u7684\u884c\u4e3a\uff0c\u4f46\u6709\u65f6\u53ef\u80fd\u6709\u7528\u3002\u4f8b\u5982\uff1a<\/p>\n<p><code>data.o<\/code><\/p>\n<p>\u5f53\u60a8\u4f7f\u7528\u7684\u6587\u4ef6\u540d\u4e0d\u662f\u201carchive:file\u201d\u8bf4\u660e\u7b26\u4e14\u4e0d\u5305\u542b\u4efb\u4f55\u901a\u914d\u7b26\u65f6\uff0c\u94fe\u63a5\u5668\u5c06\u9996\u5148\u67e5\u770b\u60a8\u662f\u5426\u8fd8\u5728\u94fe\u63a5\u5668\u547d\u4ee4\u884c\u6216<strong>INPUT<\/strong>\u547d\u4ee4\u4e2d\u6307\u5b9a\u4e86\u6587\u4ef6\u540d\u3002\u5982\u679c\u6ca1\u6709\uff0c\u94fe\u63a5\u5668\u5c06\u5c1d\u8bd5\u5c06\u8be5\u6587\u4ef6\u4f5c\u4e3a\u8f93\u5165\u6587\u4ef6\u6253\u5f00\uff0c\u5c31\u50cf\u5b83\u51fa\u73b0\u5728\u547d\u4ee4\u884c\u4e0a\u4e00\u6837\u3002\u8bf7\u6ce8\u610f\uff0c\u8fd9\u4e0e<strong>INPUT<\/strong>\u547d\u4ee4\u4e0d\u540c\uff0c\u56e0\u4e3a\u94fe\u63a5\u5668\u4e0d\u4f1a\u5728\u5b58\u6863\u641c\u7d22\u8def\u5f84\u4e2d\u641c\u7d22\u6587\u4ef6\u3002<\/p>\n<h5>3.6.4.2\u8f93\u5165\u6bb5\u901a\u914d\u7b26\u6a21\u5f0f<\/h5>\n<p>\u5728\u8f93\u5165\u6bb5\u63cf\u8ff0\u4e2d\uff0c\u6587\u4ef6\u540d\u3001\u6bb5\u540d\u6216\u4e24\u8005\u540c\u65f6\u53ef\u4ee5\u662f\u901a\u914d\u7b26\u6a21\u5f0f\u3002<\/p>\n<p>\u5728\u8bb8\u591a\u793a\u4f8b\u4e2d\u770b\u5230\u7684<code>*<\/code>\u6587\u4ef6\u540d\u662f\u6587\u4ef6\u540d\u7684<strong>\u7b80\u5355\u901a\u914d\u7b26\u6a21\u5f0f<\/strong>\u3002\u901a\u914d\u7b26\u6a21\u5f0f\u4e0eunixshell\u4f7f\u7528\u7684\u6a21\u5f0f\u7c7b\u4f3c\u3002<\/p>\n<p><code>*<\/code> \u5339\u914d\u4efb\u610f\u6570\u91cf\u7684\u5b57\u7b26<\/p>\n<p><code>?<\/code> \u5339\u914d\u4efb\u4f55<strong>\u5355\u4e2a<\/strong>\u5b57\u7b26<\/p>\n<p><code>[chars]<\/code> \u5339\u914d\u4efb\u4f55\u5b57\u7b26\u7684\u5355\u4e2a\u5b9e\u4f8b\uff1b<code>-<\/code>\u5b57\u7b26\u53ef\u7528\u4e8e\u6307\u5b9a\u5b57\u7b26\u8303\u56f4\uff0c\u5982<code>[a-z]<\/code>\u4e2d\u7684\u5b57\u7b26\uff0c\u4ee5\u5339\u914d\u4efb\u4f55\u5c0f\u5199\u5b57\u6bcd<\/p>\n<p><code>\\<\/code> \u5f15\u7528\u5176\u540e\u7684\u5b57\u7b26<\/p>\n<p>\u5f53\u6587\u4ef6\u540d\u4e0e\u901a\u914d\u7b26\u5339\u914d\u65f6\uff0c\u901a\u914d\u7b26\u5c06\u4e0d\u4e0e<strong>\u7528\u4e8e\u5728Unix\u4e0a\u5206\u9694\u76ee\u5f55\u540d<\/strong>\u7684<code>\/<\/code>\u5b57\u7b26\u5339\u914d\u3002\u7531\u5355\u4e2a<code>*<\/code>\u5b57\u7b26\u7ec4\u6210\u7684\u6a21\u5f0f\u662f\u4e00\u4e2a\u4f8b\u5916\uff1b\u5b83\u5c06\u59cb\u7ec8\u5339\u914d\u4efb\u4f55\u6587\u4ef6\u540d\uff0c\u65e0\u8bba\u5b83\u662f\u5426\u5305\u542b<code>\/<\/code>\u3002\u5728\u6bb5\u540d\u79f0\u4e2d\uff0c\u901a\u914d\u7b26\u5c06\u4e0e<code>\/<\/code>\u5b57\u7b26\u5339\u914d\u3002<\/p>\n<p>\u6587\u4ef6\u540d\u901a\u914d\u7b26\u6a21\u5f0f\u4ec5\u5339\u914d\u5728\u547d\u4ee4\u884c\u6216INPUT\u547d\u4ee4\u4e2d\u663e\u5f0f\u6307\u5b9a\u7684\u6587\u4ef6\u3002\u94fe\u63a5\u5668\u4e0d\u4f1a\u641c\u7d22\u76ee\u5f55\u4ee5\u5c55\u5f00\u901a\u914d\u7b26\u3002<\/p>\n<p>\u5982\u679c\u6587\u4ef6\u540d\u4e0e\u591a\u4e2a\u901a\u914d\u7b26\u6a21\u5f0f\u5339\u914d\uff0c\u6216\u8005\u5982\u679c\u6587\u4ef6\u540d\u663e\u5f0f\u663e\u793a\u5e76\u4e14\u4e5f\u4e0e\u901a\u914d\u7b26\u6a21\u5f0f\u5339\u914d\uff0c\u5219\u94fe\u63a5\u5668\u5c06\u4f7f\u7528\u94fe\u63a5\u5668\u811a\u672c\u4e2d\u7684\u7b2c\u4e00\u4e2a\u5339\u914d\u9879\u3002\u4f8b\u5982\uff0c\u8f93\u5165\u6bb5\u63cf\u8ff0\u7684\u8fd9\u4e2a\u5e8f\u5217\u53ef\u80fd\u662f\u9519\u8bef\u7684\uff0c\u56e0\u4e3a<code>data.o<\/code>\u89c4\u5219\u5c06\u4e0d\u88ab\u4f7f\u7528\uff1a<\/p>\n<p><code>.data : { *(.data) }<\/code><\/p>\n<p><code>.data1 : { data.o(.data) }<\/code><\/p>\n<p>\u901a\u5e38\uff0c\u94fe\u63a5\u5668\u5c06\u6309\u7167\u94fe\u63a5\u671f\u95f4\u67e5\u627e\u5230\u7684\u987a\u5e8f\u653e\u7f6e\u4e0e\u901a\u914d\u7b26\u5339\u914d\u7684\u6587\u4ef6\u548c\u6bb5\u3002\u60a8\u53ef\u4ee5\u4f7f\u7528<strong>SORT_BY_NAME<\/strong>\u5173\u952e\u5b57\u6765\u66f4\u6539\u6b64\u8bbe\u7f6e\uff0c\u8be5\u5173\u952e\u5b57\u51fa\u73b0\u5728\u62ec\u53f7\u4e2d\u901a\u914d\u7b26\u6a21\u5f0f\u4e4b\u524d\uff08\u4f8b\u5982\uff0c<code>SORT_by_NAME(.text*)<\/code>\uff09\u3002\u4f7f\u7528SORT_BY_NAME\u5173\u952e\u5b57\u65f6\uff0c\u94fe\u63a5\u5668\u5c06\u6309\u540d\u79f0\u5347\u5e8f\u5bf9\u6587\u4ef6\u6216\u6bb5\u8fdb\u884c\u6392\u5e8f\uff0c\u7136\u540e\u518d\u5c06\u5176\u653e\u5165\u8f93\u51fa\u6587\u4ef6\u4e2d\u3002<\/p>\n<p><strong>SORT_BY_ALIGNMENT<\/strong>\u4e0e<strong>SORT_BY_NAME<\/strong>\u975e\u5e38\u76f8\u4f3c\u3002\u4e0d\u540c\u4e4b\u5904\u5728\u4e8e\uff0c<strong>SORT_BY_ALIGNMENT<\/strong>\u5c06\u6309\u5bf9\u9f50\u65b9\u5f0f\u5c06\u6bb5\u6309\u5347\u5e8f\u6392\u5e8f\uff0c\u7136\u540e\u518d\u5c06\u5176\u653e\u5165\u8f93\u51fa\u6587\u4ef6\u4e2d\u3002<strong>SORT<\/strong>\u662f<strong>SORT_BY_NAME<\/strong>\u7684\u522b\u540d\u3002<\/p>\n<p>\u5f53\u94fe\u63a5\u5668\u811a\u672c\u4e2d\u5b58\u5728\u5d4c\u5957\u7684\u6bb5\u6392\u5e8f\u547d\u4ee4\u65f6\uff0c\u6bb5\u6392\u5e8f\u547d\u4ee4\u6700\u591a\u53ef\u4ee5\u6709<strong>1\u7ea7\u5d4c\u5957<\/strong>\u3002<\/p>\n<ol>\n<li><code>SORT_BY_NAME(SORT_BY_ALIGNMENT(\u901a\u914d\u7b26\u6bb5\u6a21\u5f0f))<\/code>\u3002\u5b83\u5c06\u9996\u5148\u6309\u540d\u79f0\u5bf9\u8f93\u5165\u6bb5\u8fdb\u884c\u6392\u5e8f\uff0c\u5982\u679c\u4e24\u4e2a\u6bb5\u5177\u6709\u76f8\u540c\u7684\u540d\u79f0\uff0c\u5219\u7ee7\u7eed\u6309\u5bf9\u9f50\u65b9\u5f0f\u8fdb\u884c\u6392\u5e8f\u3002<\/li>\n<li><code>SORT_BY_ALIGNMENT(SORT_BY_NAME(\u901a\u914d\u7b26\u6bb5\u6a21\u5f0f))<\/code>\u3002\u5b83\u5c06\u9996\u5148\u6309\u5bf9\u9f50\u65b9\u5f0f\u5bf9\u8f93\u5165\u90e8\u5206\u8fdb\u884c\u6392\u5e8f\uff0c\u5982\u679c\u4e24\u4e2a\u90e8\u5206\u5177\u6709\u76f8\u540c\u7684\u5bf9\u9f50\u65b9\u5f0f\uff0c\u5219\u6309\u540d\u79f0\u5bf9\u8f93\u5165\u90e8\u5206\u8fdb\u884c\u6392\u5e8f\u3002<\/li>\n<li><code>SORT_BY_NAME(SORT_BY_NAME(\u901a\u914d\u7b26\u6bb5\u6a21\u5f0f))<\/code>\u4e0e<code>SORT_BY_NAME(\u901a\u914d\u7b26\u6bb5\u6a21\u5f0f)<\/code>\u5904\u7406\u76f8\u540c\u3002<\/li>\n<li><code>SORT_BY_ALIGNMENT(SORT_BY_ALIGNMENT(\u901a\u914d\u7b26\u6bb5\u6a21\u5f0f))<\/code>\u4e0e<code>SORT_BY_ALIGNMENT(\u901a\u914d\u7b26\u6bb5\u6a21\u5f0f)<\/code>\u5904\u7406\u76f8\u540c\u3002<\/li>\n<li>\u6240\u6709\u5176\u4ed6\u5d4c\u5957\u6bb5\u6392\u5e8f\u547d\u4ee4\u65e0\u6548\u3002<\/li>\n<\/ol>\n<p>\u5f53\u540c\u65f6\u4f7f\u7528\u547d\u4ee4\u884c\u6bb5\u6392\u5e8f\u9009\u9879\u548c\u94fe\u63a5\u5668\u811a\u672c\u6bb5\u6392\u5e8f\u547d\u4ee4\u65f6\uff0c<strong>\u6bb5\u6392\u5e8f\u547d\u4ee4\u59cb\u7ec8\u4f18\u5148\u4e8e\u547d\u4ee4\u884c\u9009\u9879<\/strong>\u3002<\/p>\n<p>\u5982\u679c\u94fe\u63a5\u5668\u811a\u672c\u4e2d\u7684\u6bb5\u6392\u5e8f\u547d\u4ee4\u672a\u5d4c\u5957\uff0c\u5219\u547d\u4ee4\u884c\u9009\u9879\u5c06\u4f7f\u6bb5\u6392\u5e8f\u547d\u4ee4\u88ab\u89c6\u4e3a\u5d4c\u5957\u6392\u5e8f\u547d\u4ee4\u3002<\/p>\n<ol>\n<li>\u4f7f\u7528\u201c--sort-sections alignment\u201d\u4ee5\u53ca<code>SORT_BY_NAME(\u901a\u914d\u7b26\u6bb5\u6a21\u5f0f)<\/code>\u7b49\u540c\u4e8e<code>SORT_BY_NAME(SORT_BY_ALIGNMENT(\u901a\u914d\u7b26\u6bb5\u6a21\u5f0f))<\/code>\u3002<\/li>\n<li>\u4f7f\u7528\u201c--sort-sections name\u201d\u7684<code>SORT_BY_ALIGNMENT(\u901a\u914d\u7b26\u6bb5\u6a21\u5f0f)<\/code>\u7b49\u540c\u4e8e<code>SORT_BY_ALIGNMENT(SORT_BY_NAME(\u901a\u914d\u7b26\u6bb5\u6a21\u5f0f))<\/code>\u3002<\/li>\n<\/ol>\n<p>\u5982\u679c\u94fe\u63a5\u5668\u811a\u672c\u4e2d\u7684\u6bb5\u6392\u5e8f\u547d\u4ee4\u662f\u5d4c\u5957\u7684\uff0c\u5219<strong>\u5c06\u5ffd\u7565\u547d\u4ee4\u884c\u9009\u9879<\/strong>\u3002<\/p>\n<p>\u5982\u679c\u60a8\u5bf9\u8f93\u5165\u6bb5\u7684\u53bb\u5411\u611f\u5230\u56f0\u60d1\uff0c\u8bf7\u4f7f\u7528\u201c-M\u201d\u94fe\u63a5\u5668\u9009\u9879\u751f\u6210\u6620\u5c04\u6587\u4ef6\u3002\u6620\u5c04\u6587\u4ef6\u7cbe\u786e\u5730\u663e\u793a\u4e86\u5982\u4f55\u5c06\u8f93\u5165\u6bb5\u6620\u5c04\u5230\u8f93\u51fa\u6bb5\u3002<\/p>\n<p>\u6b64\u793a\u4f8b\u663e\u793a\u4e86\u5982\u4f55\u4f7f\u7528\u901a\u914d\u7b26\u6a21\u5f0f\u5bf9\u6587\u4ef6\u8fdb\u884c\u5206\u533a\u3002\u8fd9\u4e2a\u94fe\u63a5\u5668<\/p>\n<p>\u811a\u672c\u6307\u793a\u94fe\u63a5\u5668\u5c06\u6240\u6709\u8f93\u5165\u6587\u4ef6\u4e2d\u7684<code>.text<\/code>\u6bb5\u653e\u7f6e\u5230<code>.text<\/code>\u4e2d\uff0c\u5e76\u4e14\u5c06\u6240\u6709\u8f93\u5165\u6587\u4ef6\u4e2d\u7684<code>.bss<\/code>\u6bb5\u653e\u5165<code>.bss<\/code>\u3002\u94fe\u63a5\u5668\u5c06\u6240\u6709\u4ee5<strong>\u5927\u5199\u5b57\u7b26\u5f00\u5934<\/strong>\u7684\u6587\u4ef6\u4e2d\u7684<code>.data<\/code>\u6bb5\u653e\u5165<code>.DATA<\/code>\uff1b\u7136\u540e\u5c06\u5269\u4f59\u6587\u4ef6\u4e2d\u7684<code>.data<\/code>\u6bb5\u653e\u5165\u5230<code>.data<\/code>\u4e2d\u3002<\/p>\n<pre><code class=\"language-linkerscript\">SECTIONS { \n    .text : { *(.text) } \n    .DATA : { [A-Z]*(.data) } \n    .data : { *(.data) } \n    .bss : { *(.bss) }\n}<\/code><\/pre>\n<h5>3.6.4.3\u516c\u5171\u7b26\u53f7\u7684\u8f93\u5165\u90e8\u5206<\/h5>\n<p>\u516c\u5171\u7b26\u53f7\u9700\u8981\u7279\u6b8a\u7684\u7b26\u53f7\uff0c\u56e0\u4e3a\u5728\u8bb8\u591a\u5bf9\u8c61\u6587\u4ef6\u683c\u5f0f\u4e2d\uff0c\u516c\u5171\u7b26\u53f7\u6ca1\u6709\u7279\u5b9a\u7684\u8f93\u5165\u90e8\u5206\u3002\u94fe\u63a5\u5668\u5c06\u516c\u5171\u7b26\u53f7\u89c6\u4e3a\u4f4d\u4e8e\u540d\u4e3a\u2018<strong>COMMON<\/strong>\u2019\u7684\u8f93\u5165\u6bb5\u4e2d\u3002<\/p>\n<blockquote>\n<p><strong>What are COMMON symbols?<\/strong><\/p>\n<p>Common symbols are a feature that allow a programmer to \u2018define\u2019 several variables of the same name in different source files.  This is in contrast with the more popular way of doing, where you define a variable once in a source file, and reference it everywhere else in other source files, using extern.  When common symbols are used, the linker will merge all symbols of the same name into a single memory location, the size of which is the largest type of the individual common symbol definitions.  For example, if fileA.c defines an uninitialized 32-bit integer myint, and fileB.c defines an 8-bit char myint, then in the final executable, references to myint from both files will point to the same memory location (common location), and the linker will reserve 32 bits for that location.<\/p>\n<p>\u5f15\u81ea<strong>Arun<\/strong>\u7684\u6587\u7ae0\uff1a<\/p>\n<p><a href=\"https:\/\/binarydodo.wordpress.com\/2016\/05\/09\/investigating-linking-with-common-symbols-in-elf\/\">Investigating linking with COMMON symbols in ELF<\/a><\/p>\n<\/blockquote>\n<p>\u60a8\u53ef\u4ee5\u5c06\u6587\u4ef6\u540d\u4e0e\u201c<strong>COMMON<\/strong>\u201d\u6bb5\u4e00\u8d77\u4f7f\u7528\uff0c\u5c31\u50cf\u4f7f\u7528\u4efb\u4f55\u5176\u4ed6\u8f93\u5165\u90e8\u5206\u4e00\u6837\u3002\u53ef\u4ee5\u4f7f\u7528\u8be5\u7279\u6027\u5c06\u7279\u5b9a\u8f93\u5165\u6587\u4ef6\u4e2d\u7684\u516c\u5171\u7b26\u53f7\u653e\u7f6e\u5728\u4e00\u4e2a\u5206\u533a\u4e2d\uff0c\u800c\u5c06\u5176\u4ed6\u8f93\u5165\u6587\u4ef6\u4e2d\u7684\u516c\u5171\u7b26\u53f7\u653e\u7f6e\u5728\u53e6\u4e00\u4e2a\u5206\u533a\u4e2d\u3002<\/p>\n<p><strong>\u5728\u5927\u591a\u6570\u60c5\u51b5\u4e0b\uff0c\u8f93\u5165\u6587\u4ef6\u4e2d\u7684\u5e38\u7528\u7b26\u53f7\u5c06\u653e\u5728\u8f93\u51fa\u6587\u4ef6\u4e2d\u7684<code>.bss<\/code>\u6bb5\u4e2d<\/strong>\u3002\u4f8b\u5982\uff1a<\/p>\n<p><code>.bss { *(.bss) *(COMMON) }<\/code><\/p>\n<p>\u67d0\u4e9b\u5bf9\u8c61\u6587\u4ef6\u683c\u5f0f\u5177\u6709\u591a\u79cd\u7c7b\u578b\u7684\u516c\u5171\u7b26\u53f7\u3002\u4f8b\u5982\uff0cMIPS ELF\u5bf9\u8c61\u6587\u4ef6\u683c\u5f0f\u533a\u5206\u6807\u51c6\u516c\u5171\u7b26\u53f7\u548c\u5c0f\u578b\u516c\u5171\u7b26\u53f7\u3002\u5728\u8fd9\u79cd\u60c5\u51b5\u4e0b\uff0c\u94fe\u63a5\u5668\u5c06\u4e3a\u5176\u4ed6\u7c7b\u578b\u7684\u516c\u5171\u7b26\u53f7\u4f7f\u7528\u4e0d\u540c\u7684\u7279\u6b8a\u6bb5\u540d\u3002\u5728MIPS ELF\u7684\u60c5\u51b5\u4e0b\uff0c\u94fe\u63a5\u5668\u5bf9\u6807\u51c6\u516c\u5171\u7b26\u53f7\u4f7f\u7528<code>COMMON<\/code>\u5e76\u7528<code>.scommon<\/code>\u8868\u793a\u5c0f\u578b\u901a\u7528\u7b26\u53f7\u3002\u8fd9\u5141\u8bb8\u60a8\u5c06\u4e0d\u540c\u7c7b\u578b\u7684\u516c\u5171\u7b26\u53f7\u6620\u5c04\u5230\u4e0d\u540c\u4f4d\u7f6e\u7684\u5185\u5b58\u4e2d\u3002<\/p>\n<p>\u60a8\u6709\u65f6\u4f1a\u5728\u65e7\u7684\u94fe\u63a5\u5668\u811a\u672c\u4e2d\u770b\u5230<code>[COMMON]<\/code>\u3002\u8fd9\u79cd\u7b26\u53f7\u73b0\u5728\u88ab\u8ba4\u4e3a\u662f\u8fc7\u65f6\u7684\u3002\u5b83\u76f8\u5f53\u4e8e<code>*(COMMON)<\/code>\u3002<\/p>\n<h5>3.6.4.4\u8f93\u5165\u6bb5\u548c\u5783\u573e\u6536\u96c6<\/h5>\n<p>\u5f53\u4f7f\u7528\u94fe\u63a5\u65f6\u5783\u573e\u56de\u6536<code>(&#039;--gc-sections&#039;)<\/code>\u65f6\uff0c\u6807\u8bb0\u4e0d\u5e94\u5220\u9664\u7684\u6bb5\u901a\u5e38\u5f88\u6709\u7528\u3002\u8fd9\u662f\u901a\u8fc7\u4f7f\u7528KEEP\uff08\uff09\u5305\u56f4\u8f93\u5165\u6bb5\u7684\u901a\u914d\u7b26\u9879\u6765\u5b9e\u73b0\u7684\uff0c\u5982\uff1a<\/p>\n<p><code>KEEP(*(.init))<\/code><\/p>\n<p><code>KEEP(SORT_BY_NAME(*)(.ctors))<\/code><\/p>\n<h5>3.6.4.5\u8f93\u5165\u6bb5\u793a\u4f8b<\/h5>\n<p>\u4e0b\u9762\u7684\u793a\u4f8b\u662f\u4e00\u4e2a\u5b8c\u6574\u7684\u94fe\u63a5\u5668\u811a\u672c\u3002\u5b83\u544a\u8bc9\u94fe\u63a5\u5668\u8bfb\u53d6\u6587\u4ef6\u201call.o\u201d\u4e2d\u7684\u6240\u6709\u6bb5\u5e76\u5c06\u5176\u653e\u7f6e\u5728\u8f93\u51fa\u6bb5<code>outputa<\/code>\u7684\u5f00\u5934\uff0c\u8be5\u6bb5\u4ece\u4f4d\u7f6e\u201c0x10000\u201d\u5f00\u59cb\u3002\u6587\u4ef6&quot;foo.o&quot;\u4e2d\u7684\u6574\u4e2a<strong>\u8f93\u5165\u6bb5<code>.input1<\/code><\/strong>\u653e\u5728<strong>\u8f93\u51fa\u6bb5<code>outputa<\/code><\/strong>\u4e2d\u7684\u4e0a\u8ff0\u6bb5\u4e4b\u540e\u3002&quot;foo.o&quot;\u6587\u4ef6\u7684\u6574\u4e2a<strong>\u8f93\u5165\u6bb5<code>.input2<\/code><\/strong>\u653e\u5230<strong>\u8f93\u51fa\u6bb5<code>outputb<\/code><\/strong>\u4e2d\uff0c&quot;foo1.o&quot;\u6587\u4ef6\u7684\u6574\u4e2a<strong>\u8f93\u5165\u6bb5<code>.input1<\/code><\/strong>\u7d27\u968f\u5176\u540e\u3002\u5176\u4f59\u6240\u6709\u6587\u4ef6\u4e2d\u7684\u8f93\u5165\u6bb5<code>.input1<\/code>\u548c<code>.input2<\/code>\u5747\u88ab\u5199\u5165\u8f93\u51fa\u6bb5<code>outputc<\/code>\u4e2d\u3002<\/p>\n<pre><code class=\"language-linkerscript\">SECTIONS { \n    outputa 0x10000 : \n        {\n        all.o \n        foo.o (.input1) \n        }\n    outputb : \n        {\n        foo.o (.input2) \n        foo1.o (.input1) \n        }\n    outputc : \n        {\n        *(.input1) \n        *(.input2) \n        }\n}<\/code><\/pre>\n<hr \/>\n<p>...<\/p>\n<hr \/>\n<h4>3.6.8\u8f93\u51fa\u6bb5\u5c5e\u6027<\/h4>\n<p>\u6211\u4eec\u5728\u4e0a\u9762\u5c55\u793a\u4e86\u8f93\u51fa\u6bb5\u7684\u5b8c\u6574\u63cf\u8ff0\u5982\u4e0b\uff1a<\/p>\n<pre><code class=\"language-linkerscript\">section [address] [(type)] : \n    [AT(lma)] \n    [ALIGN(section_align)] \n    [SUBALIGN(subsection_align)] \n    [constraint] {\n        output-section-command \n        output-section-command \n        ...\n    } [&gt;region] [AT&gt;lma_region] [:phdr :phdr ...] [=fillexp]<\/code><\/pre>\n<p>\u6211\u4eec\u5df2\u7ecf\u63cf\u8ff0\u4e86section\u3001address\u548coutput section\u547d\u4ee4\u3002\u5728\u672c\u8282\u4e2d\uff0c\u6211\u4eec\u5c06\u63cf\u8ff0\u5176\u4f59\u7684\u6bb5\u5c5e\u6027\u3002<\/p>\n<h5>3.6.8.1\u8f93\u51fa\u6bb5\u7c7b\u578b<\/h5>\n<p>\u6bcf\u4e2a\u8f93\u51fa\u6bb5\u53ef\u4ee5\u6709\u4e00\u4e2a\u7c7b\u578b\u3002\u7c7b\u578b\u662f\u62ec\u53f7\u4e2d\u7684\u5173\u952e\u5b57\u3002\u5b9a\u4e49\u4e86\u4ee5\u4e0b\u7c7b\u578b\uff1a<\/p>\n<p><strong>NOLOAD<\/strong>  \u8be5\u6bb5\u5e94\u6807\u8bb0\u4e3a\u4e0d\u53ef\u52a0\u8f7d\uff0c\u4ee5\u4fbf\u5728\u7a0b\u5e8f\u8fd0\u884c\u65f6\u4e0d\u4f1a\u5c06\u5176\u52a0\u8f7d\u5230\u5185\u5b58\u4e2d\u3002<\/p>\n<p><strong>DSECT<\/strong> <\/p>\n<p><strong>COPY<\/strong><\/p>\n<p><strong>INFO<\/strong><\/p>\n<p><strong>OVERLAY<\/strong> \u8fd9\u4e9b\u7c7b\u578b\u540d\u652f\u6301\u5411\u540e\u517c\u5bb9\uff0c\u5f88\u5c11\u4f7f\u7528\u3002\u5b83\u4eec\u90fd\u5177\u6709\u76f8\u540c\u7684\u6548\u679c\uff1a<strong>\u8be5\u6bb5\u5e94\u6807\u8bb0\u4e3a\u4e0d\u53ef\u5206\u914d<\/strong>\uff0c\u4ee5\u4fbf\u5728\u7a0b\u5e8f\u8fd0\u884c\u65f6\u4e0d\u4f1a\u4e3a\u8be5\u6bb5\u5206\u914d\u5185\u5b58\u3002<\/p>\n<p>\u94fe\u63a5\u5668\u901a\u5e38\u6839\u636e\u6620\u5c04\u5230\u8f93\u51fa\u6bb5\u7684\u8f93\u5165\u6bb5\u8bbe\u7f6e\u8f93\u51fa\u6bb5\u7684\u5c5e\u6027\u3002\u53ef\u4ee5\u901a\u8fc7\u4f7f\u7528\u6bb5\u7c7b\u578b\u6765\u66ff\u4ee3\u6b64\u9009\u9879\u3002\u4f8b\u5982\uff0c\u5728\u4e0b\u9762\u7684\u811a\u672c\u793a\u4f8b\u4e2d\uff0c<code>ROM<\/code>\u6bb5\u4f4d\u4e8e\u5185\u5b58\u4f4d\u7f6e\u201c0\u201d\u5904\uff0c\u5728\u7a0b\u5e8f\u8fd0\u884c\u65f6\u4e0d\u9700\u8981\u52a0\u8f7d\u3002<code>ROM<\/code>\u6bb5\u7684\u5185\u5bb9\u5c06\u50cf\u5f80\u5e38\u4e00\u6837\u51fa\u73b0\u5728\u94fe\u63a5\u5668\u8f93\u51fa\u6587\u4ef6\u4e2d\u3002<\/p>\n<pre><code class=\"language-linkerscript\">SECTIONS { \n    ROM 0 (NOLOAD) : { ... } \n    ...\n}<\/code><\/pre>\n<h5>3.6.8.2\u8f93\u51fa\u6bb5LMA<\/h5>\n<p>\u6bcf\u4e2a\u6bb5\u90fd\u6709\u4e00\u4e2a<strong>\u865a\u62df\u5730\u5740<\/strong>\uff08VMA\uff09\u548c\u4e00\u4e2a<strong>\u52a0\u8f7d\u5730\u5740<\/strong>\uff08LMA\uff09\uff1b\u8f93\u51fa\u6bb5\u63cf\u8ff0\u4e2d\u53ef\u80fd\u51fa\u73b0\u7684\u5730\u5740\u8868\u8fbe\u5f0f\u8bbe\u7f6e\u4e86\u865a\u62df\u5730\u5740\u3002<\/p>\n<p>AT\u5173\u952e\u5b57\u540e\u9762\u7684\u8868\u8fbe\u5f0flma\u6307\u5b9a\u6bb5\u7684<strong>\u52a0\u8f7d\u5730\u5740<\/strong>\u3002<\/p>\n<p>\u6216\u8005\uff0c\u4f7f\u7528<code>AT&gt;lma_region<\/code>\u8868\u8fbe\u5f0f\uff0c\u60a8\u53ef\u4ee5\u4e3a\u8282\u7684\u52a0\u8f7d\u5730\u5740\u6307\u5b9a\u5185\u5b58\u533a\u57df\u3002\u8bf7\u6ce8\u610f\uff0c\u5982\u679c\u8be5\u8282\u5c1a\u672a\u5206\u914dVMA\uff0c\u5219\u94fe\u63a5\u5668\u4e5f\u5c06\u4f7f\u7528<em>lma_region<\/em>\u4f5c\u4e3aVMA\u533a\u57df\u3002<\/p>\n<p>\u5982\u679c\u65e2\u672a\u4e3a\u53ef\u5206\u914d\u8282\u6307\u5b9aAT\u53c8\u672a\u6307\u5b9aAT&gt;\uff0c\u5219\u94fe\u63a5\u5668\u5c06\u8bbe\u7f6eLMA\uff0c\u4ee5\u4fbf\u8be5\u8282\u7684VMA\u548cLMA\u4e4b\u95f4\u7684\u5dee\u5f02\u4e0e\u540c\u4e00\u533a\u57df\u4e2d\u7684\u524d\u4e00\u8f93\u51fa\u6bb5\u76f8\u540c\u3002\u5982\u679c\u6ca1\u6709\u524d\u9762\u7684\u8f93\u51fa\u6bb5\u6216\u8be5\u6bb5\u4e0d\u53ef\u5206\u914d\uff0c\u5219\u94fe\u63a5\u5668\u5c06LMA\u8bbe\u7f6e\u4e3a\u7b49\u4e8eVMA\u3002<\/p>\n<p>\u6b64\u529f\u80fd\u65e8\u5728<strong>\u4f7fROM\u955c\u50cf\u7684\u6784\u5efa\u53d8\u5f97\u7b80\u5355<\/strong>\u3002\u4f8b\u5982\uff0c\u4e0b\u9762\u7684\u94fe\u63a5\u5668\u811a\u672c\u521b\u5efa\u4e86\u4e09\u4e2a\u8f93\u51fa\u6bb5\uff1a\u4e00\u4e2a\u540d\u4e3a<code>.text<\/code>\uff0c\u4ece0x1000\u5f00\u59cb\uff0c\u4e00\u4e2a\u79f0\u4e3a<code>.mdata<\/code>\uff0c<strong>\u5b83\u88ab\u52a0\u8f7d\u5728<code>.text<\/code>\u6bb5\u7684\u672b\u5c3e\uff0c\u5373\u4f7f\u5176VMA\u4e3a0x2000<\/strong>\uff0c\u8fd8\u6709\u4e00\u4e2a<code>.bss<\/code>\u6bb5\u7528\u4e8e\u5728\u5730\u57400x3000\u5904\u4fdd\u5b58\u672a\u521d\u59cb\u5316\u7684\u6570\u636e\u3002\u7b26\u53f7_data\u7528\u503c0x2000\u5b9a\u4e49\uff0c\u8868\u793a\u4f4d\u7f6e\u8ba1\u6570\u5668\u4fdd\u5b58\u7684\u662fVMA\u503c\uff0c\u800c\u4e0d\u662fLMA\u503c\u3002<\/p>\n<pre><code class=\"language-linkerscript\">SECTIONS {\n.text 0x1000 : \n    { *(.text) _etext = . ; } \n.mdata 0x2000 : \n    AT ( ADDR (.text) + SIZEOF (.text) ) \n    { _data = . ; *(.data); _edata = . ; }\n.bss 0x3000 : \n    { _bstart = . ; *(.bss) *(COMMON) ; _bend = . ;}\n}<\/code><\/pre>\n<p>\u4e0e\u4f7f\u7528\u6b64\u94fe\u63a5\u5668\u811a\u672c\u751f\u6210\u7684\u7a0b\u5e8f\u4e00\u8d77\u4f7f\u7528\u7684\u8fd0\u884c\u65f6\u521d\u59cb\u5316\u4ee3\u7801\u5c06\u5305\u62ec\u4ee5\u4e0b\u5185\u5bb9\uff0c\u4ee5\u5c06\u521d\u59cb\u5316\u6570\u636e\u4eceROM\u955c\u50cf\u590d\u5236\u5230\u5176\u8fd0\u884c\u65f6\u5730\u5740\u3002<strong>\u8bf7\u6ce8\u610f\uff0c\u6b64\u4ee3\u7801\u5982\u4f55\u5229\u7528\u94fe\u63a5\u5668\u811a\u672c\u5b9a\u4e49\u7684\u7b26\u53f7\u3002<\/strong><\/p>\n<pre><code class=\"language-linkerscript\">extern char _etext, _data, _edata, _bstart, _bend; \nchar *src = &amp;_etext; \nchar *dst = &amp;_data;\n\n\/* ROM has data at end of text; copy it. *\/ \nwhile (dst &lt; &amp;_edata) { \n    *dst++ = *src++;\n}\n\n\/* Zero bss *\/ \nfor (dst = &amp;_bstart; dst&lt; &amp;_bend; dst++) \n    *dst = 0;<\/code><\/pre>\n<h5>3.6.8.3\u5f3a\u5236\u8f93\u51fa\u5bf9\u9f50<\/h5>\n<p>\u53ef\u4ee5\u4f7f\u7528<strong>ALIGN<\/strong>\u589e\u52a0\u8f93\u51fa\u6bb5\u7684\u5bf9\u9f50\u3002<\/p>\n<h5>3.6.8.4\u5f3a\u5236\u8f93\u5165\u5bf9\u9f50<\/h5>\n<p>\u53ef\u4ee5\u4f7f\u7528<strong>SUBALIGN<\/strong>\u5728\u8f93\u51fa\u6bb5\u5185\u5f3a\u5236\u8f93\u5165\u6bb5\u5bf9\u9f50\u3002\u6307\u5b9a\u7684\u503c\u5c06\u8986\u76d6\u7531\u8f93\u5165\u6bb5\uff08\u65e0\u8bba\u5927\u5c0f\uff09\u7ed9\u5b9a\u7684\u4efb\u4f55\u5bf9\u9f50\u65b9\u5f0f\u3002<\/p>\n<h5>3.6.8.5\u8f93\u51fa\u6bb5\u7ea6\u675f<\/h5>\n<p>\u901a\u8fc7\u5206\u522b\u4f7f\u7528\u5173\u952e\u5b57<code>ONLY_IF_RO<\/code>\u548c<code>ONLY_IF_RW<\/code>\uff0c\u53ef\u4ee5\u6307\u5b9a\u4ec5\u5f53\u8f93\u51fa\u6bb5\u7684\u6240\u6709\u8f93\u5165\u6bb5\u90fd\u662f\u53ea\u8bfb\u7684\u6216\u5176\u6240\u6709\u8f93\u5165\u6bb5\u90fd\u662f\u8bfb\u5199\u7684\u65f6\u624d\u5e94\u521b\u5efa\u8f93\u51fa\u6bb5\u3002<\/p>\n<h5>3.6.8.6\u8f93\u51fa\u6bb5\u533a\u57df<\/h5>\n<p>\u60a8\u53ef\u4ee5\u4f7f\u7528<code>&gt;region<\/code>\u5c06\u6bb5\u5206\u914d\u7ed9\u5148\u524d\u4f7f\u7528<code>MEMORY<\/code>\u547d\u4ee4\u5b9a\u4e49\u7684\u5185\u5b58\u533a\u57df\u3002<\/p>\n<p>\u4e0b\u9762\u662f\u4e00\u4e2a\u7b80\u5355\u7684\u4f8b\u5b50\uff1a<\/p>\n<pre><code class=\"language-linkerscript\">MEMORY { rom : ORIGIN = 0x1000, LENGTH = 0x1000 }\nSECTIONS { ROM : { *(.text) } &gt;rom }<\/code><\/pre>\n<h5>3.6.8.7\u8f93\u51fa\u6bb5\u7269\u7406\u5730\u5740<\/h5>\n<p>\u53ef\u4ee5\u4f7f\u7528<code>:phdr<\/code>\u5c06\u6bb5\u5206\u914d\u7ed9\u5148\u524d\u5b9a\u4e49\u7684\u7a0b\u5e8f\u6bb5\u3002\u5982\u679c\u4e00\u4e2a\u6bb5\u88ab\u6307\u5b9a\u7ed9\u4e00\u4e2a\u6216\u591a\u4e2a\u6bb5\uff0c\u5219\u6240\u6709\u540e\u7eed\u5206\u914d\u7684\u533a\u6bb5\u4e5f\u5c06\u88ab\u6307\u5b9a\u7ed9\u8fd9\u4e9b\u533a\u6bb5\uff0c\u9664\u975e\u5b83\u4eec\u4f7f\u7528\u663e\u5f0f<code>:phdr<\/code>\u4fee\u9970\u7b26\u3002\u60a8\u53ef\u4ee5\u4f7f\u7528<code>:NONE<\/code>\u544a\u8bc9\u94fe\u63a5\u5668\u6839\u672c\u4e0d\u8981\u5c06\u8be5\u6bb5\u653e\u5165\u4efb\u4f55\u7a0b\u5e8f\u6bb5\u4e2d\u3002<\/p>\n<p>\u4e0b\u9762\u662f\u4e00\u4e2a\u7b80\u5355\u7684\u4f8b\u5b50\uff1a<\/p>\n<pre><code class=\"language-linkerscript\">PHDRS { text PT_LOAD ; }\nSECTIONS { .text : { *(.text) } :text }<\/code><\/pre>\n<hr \/>\n<p>...<\/p>\n<hr \/>\n<h3>3.7\u5185\u5b58\u547d\u4ee4<\/h3>\n<p>\u94fe\u63a5\u5668\u7684\u9ed8\u8ba4\u914d\u7f6e\u5141\u8bb8\u5206\u914d\u6240\u6709\u53ef\u7528\u5185\u5b58\u3002\u60a8\u53ef\u4ee5\u4f7f\u7528<strong>MEMORY<\/strong>\u547d\u4ee4\u8986\u76d6\u8be5\u914d\u7f6e\u3002<\/p>\n<p><strong>MEMORY<\/strong>\u547d\u4ee4\u63cf\u8ff0\u76ee\u6807\u4e2d\u5185\u5b58\u5757\u7684<strong>\u4f4d\u7f6e<\/strong>\u548c<strong>\u5927\u5c0f<\/strong>\u3002\u60a8\u53ef\u4ee5\u4f7f\u7528\u5b83\u6765\u63cf\u8ff0\u94fe\u63a5\u5668\u53ef\u4ee5\u4f7f\u7528\u54ea\u4e9b\u5185\u5b58\u533a\u57df\uff0c\u4ee5\u53ca\u5fc5\u987b\u907f\u514d\u54ea\u4e9b\u5185\u5b58\u533a\u57df\u3002\u7136\u540e\u53ef\u4ee5\u5c06\u8282\u5206\u914d\u7ed9\u7279\u5b9a\u7684\u5185\u5b58\u533a\u57df\u3002\u94fe\u63a5\u5668\u5c06\u6839\u636e\u5185\u5b58\u533a\u57df\u8bbe\u7f6e\u6bb5\u5730\u5740\uff0c\u5e76\u8b66\u544a\u533a\u57df\u8fc7\u6ee1\u3002<strong>\u94fe\u63a5\u5668\u4e0d\u4f1a\u968f\u610f\u79fb\u52a8\u6bb5\u4ee5\u9002\u5e94\u53ef\u7528\u533a\u57df\u3002<\/strong><\/p>\n<p>\u94fe\u63a5\u5668\u811a\u672c\u6700\u591a\u53ef\u4ee5\u5305\u542b<strong>MEMORY<\/strong>\u547d\u4ee4\u7684<strong>\u4e00\u6b21<\/strong>\u4f7f\u7528\u3002\u4f46\u662f\uff0c\u60a8\u53ef\u4ee5\u6839\u636e\u9700\u8981\u5728\u5176\u4e2d<strong>\u5b9a\u4e49\u4efb\u610f\u591a\u7684\u5185\u5b58\u5757<\/strong>\u3002\u8bed\u6cd5\u662f\uff1a<\/p>\n<pre><code class=\"language-linkerscript\">MEMORY {\n        name [(attr)] : ORIGIN = origin, LENGTH = len \n        ...\n}<\/code><\/pre>\n<p>name\u662f\u94fe\u63a5\u5668\u811a\u672c\u4e2d\u7528\u4e8e\u5f15\u7528\u533a\u57df\u7684\u540d\u79f0\u3002\u533a\u57df\u540d\u79f0<strong>\u5728\u94fe\u63a5\u5668\u811a\u672c\u4e4b\u5916\u6ca1\u6709\u4efb\u4f55\u542b\u4e49<\/strong>\u3002\u533a\u57df\u540d\u79f0\u5b58\u50a8\u5728\u5355\u72ec\u7684\u540d\u79f0\u7a7a\u95f4\u4e2d\uff0c<strong>\u4e0d\u4f1a\u4e0e\u7b26\u53f7\u540d\u3001\u6587\u4ef6\u540d\u6216\u8282\u540d\u51b2\u7a81<\/strong>\u3002\u5728<strong>MEMORY<\/strong>\u547d\u4ee4\u4e2d\uff0c\u6bcf\u4e2a\u5185\u5b58\u533a\u57df\u5fc5\u987b\u6709\u4e00\u4e2a\u4e0d\u540c\u7684\u540d\u79f0\u3002\u4f46\u662f\uff0c\u60a8\u53ef\u4ee5\u4f7f\u7528\u7b2c3.4.4\u8282\u4e2d\u7684\u5185\u5bb9\u5c06\u540e\u7eed\u7684\u522b\u540d\u6dfb\u52a0\u5230\u73b0\u6709\u5185\u5b58\u533a\u57df\u3002<\/p>\n<p>attr\u5b57\u7b26\u4e32\u662f\u4e00\u4e2a\u53ef\u9009\u7684\u5c5e\u6027\u5217\u8868\uff0c\u7528\u4e8e\u6307\u5b9a\u662f\u5426\u4e3a\u672a\u5728\u94fe\u63a5\u5668\u811a\u672c\u4e2d\u663e\u5f0f\u6620\u5c04\u7684\u8f93\u5165\u6bb5\u4f7f\u7528\u7279\u5b9a\u5185\u5b58\u533a\u57df\u3002\u5982\u7b2c3.6\u8282\u6240\u8ff0\uff0c\u5982\u679c\u60a8\u6ca1\u6709\u4e3a\u67d0\u4e9b\u8f93\u5165\u6bb5\u6307\u5b9a\u8f93\u51fa\u6bb5\uff0c\u94fe\u63a5\u5668\u5c06\u521b\u5efa\u4e00\u4e2a\u4e0e\u8f93\u5165\u6bb5\u540c\u540d\u7684\u8f93\u51fa\u6bb5\u3002\u5982\u679c\u60a8\u5b9a\u4e49\u4e86\u533a\u57df\u5c5e\u6027\uff0c\u94fe\u63a5\u5668\u5c06\u4f7f\u7528\u5b83\u4eec\u4e3a\u5b83\u521b\u5efa\u7684\u8f93\u51fa\u90e8\u5206\u9009\u62e9\u5185\u5b58\u533a\u57df\u3002<\/p>\n<p>attr\u5b57\u7b26\u4e32\u53ea\u80fd\u7531\u4ee5\u4e0b\u5b57\u7b26\u7ec4\u6210\uff1a<\/p>\n<p><code>R<\/code> \u53ea\u8bfb\u6bb5<\/p>\n<p><code>W<\/code> \u8bfb\/\u5199\u6bb5<\/p>\n<p><code>X<\/code> \u53ef\u6267\u884c\u6bb5<\/p>\n<p><code>A<\/code> \u53ef\u5206\u914d\u6bb5<\/p>\n<p><code>I<\/code> \u5df2\u521d\u59cb\u5316\u6bb5<\/p>\n<p><code>L<\/code> \u4e0e<code>I<\/code>\u76f8\u540c<\/p>\n<p><code>!<\/code> <strong>\u53cd\u8f6c<\/strong>\u4e0a\u8ff0\u4efb\u4f55\u5c5e\u6027\u7684\u610f\u4e49<\/p>\n<p>\u5982\u679c\u672a\u6620\u5c04\u7684\u8282\u4e0e\u9664<code>!<\/code>\u4ee5\u5916\u7684\u4efb\u4f55\u5217\u51fa\u7684\u5c5e\u6027\u5339\u914d\uff0c\u5b83\u5c06\u88ab\u653e\u7f6e\u5728\u5185\u5b58\u533a\u57df\u4e2d\u3002<code>!<\/code>\u5c5e\u6027\u53cd\u8f6c\u6b64\u6d4b\u8bd5\uff0c\u4ee5\u4fbf\u4ec5\u5f53\u672a\u6620\u5c04\u7684\u6bb5\u4e0e\u6240\u5217\u51fa\u7684\u4efb\u4f55\u5c5e\u6027\u5747\u4e0d\u5339\u914d\u65f6\uff0c\u624d\u4f1a\u5c06\u5176\u653e\u7f6e\u5728\u5185\u5b58\u533a\u57df\u4e2d\u3002<\/p>\n<p>origin\u662f<strong>\u5185\u5b58\u533a\u57df\u8d77\u59cb\u5730\u5740\u7684\u6570\u5b57\u8868\u8fbe\u5f0f<\/strong>\u3002\u8868\u8fbe\u5f0f\u7684\u8ba1\u7b97\u7ed3\u679c\u5fc5\u987b\u4e3a<strong>\u5e38\u91cf<\/strong>\uff0c\u5e76\u4e14\u4e0d\u80fd\u5305\u542b\u4efb\u4f55\u7b26\u53f7\u3002\u5173\u952e\u5b57<strong>ORIGIN<\/strong>\u53ef\u4ee5\u7f29\u5199\u4e3aorg\u6216o\uff08\u4f46\u4e0d\u80fd\u7f29\u5199\u4e3aORG\uff09\u3002<\/p>\n<p>len\u662f<strong>\u5185\u5b58\u533a\u57df\u5927\u5c0f<\/strong>\uff08\u4ee5\u5b57\u8282\u4e3a\u5355\u4f4d\uff09\u7684\u8868\u8fbe\u5f0f\u3002\u4e0e\u539f\u59cb\u8868\u8fbe\u5f0f\u4e00\u6837\uff0c\u8be5\u8868\u8fbe\u5f0f\u5fc5\u987b\u4ec5\u4e3a\u6570\u503c\u8868\u8fbe\u5f0f\uff0c\u4e14\u8ba1\u7b97\u7ed3\u679c\u5fc5\u987b\u4e3a\u5e38\u91cf\u3002\u5173\u952e\u5b57<strong>LENGTH<\/strong>\u53ef\u4ee5\u7f29\u5199\u4e3alen\u6216l\u3002<\/p>\n<p>\u5728\u4e0b\u9762\u7684\u793a\u4f8b\u4e2d\uff0c\u6211\u4eec\u6307\u5b9a\u6709\u4e24\u4e2a\u5185\u5b58\u533a\u57df\u53ef\u4f9b\u5206\u914d\uff1a\u4e00\u4e2a\u4ece\u201c0\u201d\u5f00\u59cb\u5206\u914d256 KB\uff0c\u53e6\u4e00\u4e2a\u4ece\u201c0x40000000\u201d\u5f00\u59cb\u5206\u914d4 MB\u3002\u94fe\u63a5\u5668\u5c06\u628a\u672a\u663e\u5f0f\u6620\u5c04\u5230\u5185\u5b58\u533a\u57df\u4e14\u4e3a\u53ea\u8bfb\u6216\u53ef\u6267\u884c\u7684\u6bcf\u4e2a\u90e8\u5206\u653e\u5165\u201crom\u201d\u5185\u5b58\u533a\u57df\u3002\u94fe\u63a5\u5668\u4f1a\u5c06\u672a\u663e\u5f0f\u6620\u5c04\u5230\u5185\u5b58\u533a\u57df\u7684\u5176\u4ed6\u90e8\u5206\u653e\u5165\u201cram\u201d\u5185\u5b58\u533a\u57df\u3002<\/p>\n<pre><code class=\"language-linkerscript\">MEMORY {\n    rom (rx) : ORIGIN = 0, LENGTH = 256K \n    ram (!rx) : org = 0x40000000, l = 4M\n}<\/code><\/pre>\n<p>\u5f53\u60a8\u5b9a\u4e49\u5185\u5b58\u533a\u57df\u540e\uff0c\u53ef\u4ee5\u901a\u8fc7\u4f7f\u7528<code>&gt;region<\/code>\u7684\u8f93\u51fa\u6bb5\u5c5e\u6027\uff0c\u6307\u793a\u94fe\u63a5\u5668\u5c06\u7279\u5b9a\u7684\u8f93\u51fa\u6bb5\u653e\u5165\u8be5\u5185\u5b58\u533a\u57df\u3002\u4f8b\u5982\uff0c\u5982\u679c\u60a8\u6709\u4e00\u4e2a\u540d\u4e3a<code>mem<\/code>\u7684\u5185\u5b58\u533a\u57df\uff0c\u90a3\u4e48\u60a8\u5c06\u5728\u8f93\u51fa\u6bb5\u5b9a\u4e49\u4e2d\u4f7f\u7528<code>&gt;mem<\/code>\u3002\u5982\u679c\u6ca1\u6709\u4e3a\u8f93\u51fa\u6bb5\u6307\u5b9a\u5730\u5740\uff0c\u94fe\u63a5\u5668\u5c06\u628a\u5730\u5740\u8bbe\u7f6e\u4e3a\u5185\u5b58\u533a\u57df\u5185\u7684\u4e0b\u4e00\u4e2a\u53ef\u7528\u5730\u5740\u3002\u5982\u679c\u5b9a\u5411\u5230\u5185\u5b58\u533a\u57df\u7684\u7ec4\u5408\u8f93\u51fa\u6bb5\u5bf9\u4e8e\u8be5\u533a\u57df\u6765\u8bf4\u592a\u5927\uff0c\u5219\u94fe\u63a5\u5668\u5c06\u53d1\u51fa\u9519\u8bef\u6d88\u606f\u3002<\/p>\n<p>\u53ef\u4ee5\u901a\u8fc7<code>ORIGIN(memory)<\/code>\u548c<code>LENGTH(memory)<\/code>\u51fd\u6570\u8bbf\u95ee\u8868\u8fbe\u5f0f\u4e2d\u5185\u5b58\u7684<strong>\u8d77\u70b9<\/strong>\u548c<strong>\u957f\u5ea6<\/strong>\uff1a<\/p>\n<p><code>_fstack = ORIGIN(ram) + LENGTH(ram) - 4;<\/code><\/p>\n<hr \/>\n<p>...<\/p>\n<hr \/>\n<h4>3.10.5 \u4f4d\u7f6e\u8ba1\u6570\u5668<\/h4>\n<p>\u7279\u6b8a\u94fe\u63a5\u5668\u53d8\u91cf<strong>\u70b9<\/strong><code>.<\/code>\u59cb\u7ec8\u5305\u542b\u5f53\u524d\u8f93\u51fa\u4f4d\u7f6e\u7684\u8ba1\u6570\u5668\u3002\u7531\u4e8e<code>.<\/code>\u59cb\u7ec8\u5f15\u7528\u8f93\u51fa\u6bb5\u4e2d\u7684\u4f4d\u7f6e\uff0c\u6545\u5b83\u53ea\u80fd\u51fa\u73b0\u5728<strong>SECTIONS<\/strong>\u547d\u4ee4\u4e2d\u7684\u8868\u8fbe\u5f0f\u4e2d\u3002<code>.<\/code>\u8fd9\u4e2a\u7b26\u53f7\u53ef\u4ee5\u51fa\u73b0\u5728\u8868\u8fbe\u5f0f\u4e2d<strong>\u5141\u8bb8\u4f7f\u7528\u666e\u901a\u7b26\u53f7\u7684\u4efb\u4f55\u4f4d\u7f6e<\/strong>\u3002<\/p>\n<p>\u7ed9<code>.<\/code>\u8d4b\u503c\u3002\u5c06\u5bfc\u81f4\u4f4d\u7f6e\u8ba1\u6570\u5668\u79fb\u52a8\u3002\u8fd9\u53ef\u7528\u4e8e\u5728\u8f93\u51fa\u6bb5\u4e2d\u521b\u5efa\u5b54\u3002<strong>\u4f4d\u7f6e\u8ba1\u6570\u5668\u4e0d\u80fd\u5728\u8f93\u51fa\u6bb5\u5185\u5411\u540e\u79fb\u52a8<\/strong>\uff0c\u5982\u679c\u8fd9\u6837\u505a\u4f1a\u521b\u5efa\u5177\u6709\u91cd\u53e0LMA\u7684\u533a\u57df\uff0c<strong>\u540c\u7406\uff0c\u4e5f\u5927\u6982\u7387\u4e0d\u80fd\u5728\u8f93\u51fa\u6bb5\u5916\u5411\u540e\u79fb\u52a8<\/strong>\u3002<\/p>\n<pre><code class=\"language-linkerscript\">SECTIONS {\n    output : {\n        file1(.text) \n        . = . + 1000; \n        file2(.text) \n        . += 1000; \n        file3(.text)\n    } = 0x12345678; \n}<\/code><\/pre>\n<p>\u5728\u4e0a\u8ff0\u793a\u4f8b\u4e2d\uff0c\u6e90\u4e8e<code>file1<\/code>\u6587\u4ef6\u7684<code>.text<\/code>\u6bb5\u4f1a\u88ab\u653e\u7f6e\u4e8e\u8f93\u51fa\u6bb5<code>output<\/code>\u7684\u8d77\u59cb\u4f4d\u7f6e\u3002\u7d27\u968f\u5176\u540e\u7684\u662f1000\u5b57\u8282\u7684\u95f4\u9699\u3002\u63a5\u7740\u662f\u6e90\u4e8e<code>file2<\/code>\u6587\u4ef6\u7684<code>.text<\/code>\u6bb5\uff0c\u518d\u540e\u9762\u662f\u6e90\u4e8e<code>file3<\/code>\u6587\u4ef6\u7684<code>.text<\/code>\u6bb5\uff0c\u4e8c\u8005\u4e4b\u95f4\u540c\u6837\u6709\u67091000\u5b57\u8282\u7684\u95f4\u9699\u3002<code>=0x12345678<\/code>\u8fd9\u79cd\u5199\u6cd5\u6307\u5b9a\u4e86\u8981\u5728\u95f4\u9699\u4e2d\u5199\u5165\u7684\u6570\u636e\u5185\u5bb9\u3002<\/p>\n<p>\u6ce8\uff1a<strong><code>.<\/code>\u5b9e\u9645\u4e0a\u662f\u6307\u4ece\u5f53\u524d\u5305\u542b\u5bf9\u8c61\u7684\u8d77\u59cb\u5904\u5f00\u59cb\u7684\u5b57\u8282\u504f\u79fb\u91cf<\/strong>\u3002\u901a\u5e38\u5728\u8d77\u59cb\u5730\u5740\u4e3a0\u7684<strong>SECTIONS<\/strong>\u8bed\u53e5\u4e2d<code>.<\/code>\u53ef\u4ee5\u7528\u4f5c\u7edd\u5bf9\u5730\u5740\u3002\u4f46\u662f\u5982\u679c\u5728\u6bb5\u63cf\u8ff0\u4e2d\u4f7f\u7528\uff0c\u5b83\u6307\u7684\u662f\u4ece\u8be5\u8282\u5f00\u59cb\u7684\u5b57\u8282\u504f\u79fb\u91cf\uff0c\u800c\u4e0d\u4e00\u5b9a\u662f\u7edd\u5bf9\u5730\u5740\u3002\u56e0\u6b64\uff0c\u5728\u8fd9\u6837\u7684\u811a\u672c\u4e2d\uff1a<\/p>\n<pre><code class=\"language-linkerscript\">SECTIONS {\n    . = 0x100 \n    .text: { \n        *(.text) \n        . = 0x200\n    } . = 0x500 \n    .data: { \n        *(.data) \n        . += 0x600\n    } \n}<\/code><\/pre>\n<p><code>.text<\/code>\u6bb5\u5c06\u88ab\u5206\u914d\u4e00\u4e2a<strong>0x100\u7684\u8d77\u59cb\u5730\u5740<\/strong>\u4ee5\u53ca<strong>0x200\u5b57\u8282\u7684\u5927\u5c0f<\/strong>\uff0c\u5373\u4f7f\u8be5\u6bb5\u4e2d\u6ca1\u6709\u8db3\u591f\u7684\u6570\u636e\u6765\u586b\u5145\u6b64\u533a\u57df\u3002\uff08\u5982\u679c\u6570\u636e\u592a\u591a\uff0c\u5c06\u4ea7\u751f\u4e00\u4e2a\u9519\u8bef\uff0c\u56e0\u4e3a\u8fd9\u5c06\u662f\u4e00\u6b21\u5411\u540e\u79fb\u52a8\u7684\u5c1d\u8bd5\uff09\u3002<code>.data<\/code>\u6bb5\u5c06\u4ece0x500\u5f00\u59cb\uff0c\u5728<strong><code>.data<\/code>\u4e2d\u7684\u6570\u636e\u672b\u5c3e<\/strong>\u548c<strong><code>.data<\/code>\u8f93\u51fa\u6bb5\u7684\u7ed3\u5c3e<\/strong>\u4e4b\u95f4\u5c06\u6709\u989d\u5916\u76840x600\u5b57\u8282\u7684\u7a7a\u95f4\u3002<\/p>\n<p>\u5982\u679c\u94fe\u63a5\u5668\u9700\u8981\u653e\u7f6e\u5b64\u7acb\u6bb5\uff0c\u5219\u5c06\u7b26\u53f7\u8bbe\u7f6e\u4e3a\u8f93\u51fa\u6bb5\u8bed\u53e5\u5916\u90e8\u7684\u4f4d\u7f6e\u8ba1\u6570\u5668\u7684\u503c\u53ef\u80fd\u4f1a\u5bfc\u81f4\u610f\u5916\u503c\u3002\u4f8b\u5982\uff0c\u7ed9\u51fa\u5982\u4e0b\u811a\u672c\uff1a<\/p>\n<pre><code class=\"language-linkerscript\">SECTIONS {\n    start_of_text = . ; \n    .text: { *(.text) } \n    end_of_text = . ;\n\n    start_of_data = . ; \n    .data: { *(.data) } \n    end_of_data = . ;\n}<\/code><\/pre>\n<p>\u5982\u679c\u94fe\u63a5\u5668\u9700\u8981\u653e\u7f6e\u4e00\u4e9b\u8f93\u5165\u6bb5\uff0c\u4f8b\u5982\uff1a\u5982\u679c\u811a\u672c\u4e2d\u6ca1\u6709\u63d0\u5230<code>.rodata<\/code>\uff0c\u5b83\u53ef\u80fd\u4f1a\u9009\u62e9\u5c06\u8be5\u6bb5\u653e\u5728<code>.text<\/code>\u548c<code>.data<\/code>\u4e24\u4e2a\u90e8\u5206\u4e4b\u95f4\u3002\u60a8\u53ef\u80fd\u8ba4\u4e3a\u94fe\u63a5\u5668\u5e94\u8be5\u5c06<code>.rodata<\/code>\u653e\u7f6e\u5728\u4e0a\u8ff0\u7684\u811a\u672c\u4e2d\u7684\u7a7a\u767d\u884c\u4e0a\uff0c\u4f46\u662f\u7a7a\u767d\u884c\u5bf9\u4e8e\u94fe\u63a5\u5668\u6ca1\u6709\u7279\u522b\u7684\u610f\u4e49\u3002\u6b64\u5916\uff0c\u94fe\u63a5\u5668\u4e0d\u4f1a\u5c06\u4e0a\u8ff0\u7b26\u53f7\u540d\u79f0\u4e0e\u5176\u6240\u5728\u6bb5\u76f8\u5173\u8054\u3002\u76f8\u53cd\uff0c<strong>\u5b83\u5047\u5b9a\u6240\u6709\u8d4b\u503c\u6216\u5176\u4ed6\u8bed\u53e5\u90fd\u5c5e\u4e8e\u524d\u4e00\u4e2a\u8f93\u51fa\u6bb5<\/strong>\uff0c\u4f46\u7ed9<code>.<\/code>\u8d4b\u503c\u7684\u7279\u6b8a\u60c5\u51b5\u9664\u5916\u3002\u4e5f\u5c31\u662f\u8bf4\uff0c\u94fe\u63a5\u5668\u5c06\u6309\u7167\u5982\u540c\u4e0b\u8ff0\u811a\u672c\u7684\u65b9\u5f0f\u6765\u653e\u7f6e\u5b64\u7acb\u7684<code>.rodata<\/code>\u6bb5\uff1a<\/p>\n<pre><code class=\"language-linkerscript\">SECTIONS {\n    start_of_text = . ; \n    .text: { *(.text) } \n    end_of_text = . ;\n\n    start_of_data = . ; \n    .rodata: { *(.rodata) } \n    .data: { *(.data) } \n    end_of_data = . ;\n}<\/code><\/pre>\n<p>\u8fd9\u5e76\u4e0d\u4e00\u5b9a\u662f\u811a\u672c\u4f5c\u8005\u5e0c\u671bstart_of_data\u6240\u5177\u6709\u7684\u503c\u3002\u5f71\u54cd\u5b64\u7acb\u6bb5\u653e\u7f6e\u7684\u4e00\u79cd\u65b9\u6cd5\u662f<strong>\u5c06\u4f4d\u7f6e\u8ba1\u6570\u5668\u5206\u914d\u7ed9\u81ea\u8eab<\/strong>\uff0c\u56e0\u4e3a\u94fe\u63a5\u5668\u5047\u5b9a\u4e3a<code>.<\/code>\u8d4b\u503c\u662f\u5728\u8bbe\u7f6e\u4e0b\u4e00\u4e2a\u8f93\u51fa\u6bb5\u7684\u8d77\u59cb\u5730\u5740\uff0c\u6545\u5e94\u4e0e\u8be5\u6bb5\u5206\u7ec4\u3002\u6240\u4ee5\u4f60\u53ef\u4ee5\u8fd9\u6837\u5199\uff1a<\/p>\n<pre><code class=\"language-linkerscript\">SECTIONS {\n    start_of_text = . ; \n    .text: { *(.text) } \n    end_of_text = . ;\n\n    . = . ;\n    start_of_data = . ; \n    .data: { *(.data) } \n    end_of_data = . ;\n}<\/code><\/pre>\n<p>\u73b0\u5728\uff0c\u5b64\u7acb\u6bb5<code>.rodata<\/code>\u5c06\u653e\u7f6e\u5728<em>end_of_text<\/em>\u548c<em>start_of_data<\/em>\u4e4b\u95f4\u3002<\/p>\n","protected":false},"excerpt":{"rendered":"<p>3 \u94fe\u63a5\u811a\u672c \u6bcf\u4e2a\u94fe\u63a5\u90fd\u7531\u94fe\u63a5\u811a\u672c\uff08linker script\uff09\u63a7\u5236\u3002\u6b64\u811a\u672c\u662f\u7528\u94fe\u63a5\u5668\u547d\u4ee4\u8bed\u8a00\u7f16\u5199\u7684\u3002 \u94fe\u63a5\u5668 [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[5],"tags":[11],"class_list":["post-66","post","type-post","status-publish","format-standard","hentry","category-embedded","tag-11"],"_links":{"self":[{"href":"https:\/\/zhewana.cn\/index.php?rest_route=\/wp\/v2\/posts\/66","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/zhewana.cn\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/zhewana.cn\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/zhewana.cn\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/zhewana.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=66"}],"version-history":[{"count":1,"href":"https:\/\/zhewana.cn\/index.php?rest_route=\/wp\/v2\/posts\/66\/revisions"}],"predecessor-version":[{"id":286,"href":"https:\/\/zhewana.cn\/index.php?rest_route=\/wp\/v2\/posts\/66\/revisions\/286"}],"wp:attachment":[{"href":"https:\/\/zhewana.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=66"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/zhewana.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=66"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/zhewana.cn\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=66"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}