当前位置:文档之家› 第7章 嵌入式uClinux及应用开发

第7章 嵌入式uClinux及应用开发

せ7』 uClinux ⩗ゴҢ ϔϾ䩜 S3C4510B⹀ӊ ⱘ uClinux ԰㋏㒳 Ϟ䖯㸠 ⫼⿟ ⱘ ˈ䗤ℹ䆆䗄 ԩ Linux⦃ ϟ㓪 ⫼ ⫼⿟ ⱘ ⊩ ℹ偸ˈ Ў❳ Windows ԰㋏㒳ⱘ⫼ ҟ㒡 䖭⾡ ПϞˈՓ⫼ԩ⾡ 㓪 㓪䆥㞾 ⱘ ⫼DŽ䗮䖛 ゴⱘ дˈ䇏㗙 ҹ uClinux ϔ ⱘњ㾷ˈ Ϩ Linux Windows ϟ ㋏㒳 ⫼ ⱘ ⊩DŽゴЏ㽕 ˖ˉ uClinux㋏㒳ὖˉ GNUⱘՓ⫼ˉ ゟuClinux ⦃ˉ uClinuxϟ ⫼⿟7.1 uClinux㋏㒳ὖPC Ϟ ⫼⿟ ⱘ⫼ 䛑Ӯ 䖭ḋⱘ 㾝ˈPC ⱘ ԰㋏㒳 կ ⫼⿟ ˄API˅ˈ ⱘ ⫼⿟ ҹⳈ ԰㋏㒳Ϟ䖤㸠DŽ㱑✊ ㋏㒳ⱘ ⫼⿟ ҹ 㻌 Ϟ䖤㸠ˈԚЎњՓ㋏㒳 ӏ ㅵ⧚ǃ ㅵ⧚ǃ ㅵ⧚ǃ䌘⑤ㅵ⧚ǃџӊㅵ⧚ǃ㋏㒳ㅵ⧚ǃ⍜ ㅵ⧚ǃ䯳 ㅵ⧚ Ё ⧚ⱘ㛑 ˈ կ ӏ ⧚ˈ ⱘ 䜡㋏㒳䌘⑤ⱘ 㛑ˈ⫼ 䳔㽕䩜 㞾 ⱘ⹀ӊ 䰙 ⫼䗝 䗖 ⱘ ԰㋏㒳˄Embedded Operating Systemˈҹϟㅔ⿄EOS˅DŽ 㡖 㒧 к 䇜 ⱘ⹀ӊ S3C4510Bˈҟ㒡ϔ⾡䩜 ϡ MMUⱘARM ⧚ ⱘ ԰㋏㒳uClinuxDŽuClinux ϔϾ ヺ GNU/GPL 㑺ⱘ ԰㋏㒳ˈ ҷⷕˈ⦄ ⬅Lineo 㓈 DŽuClinuxⱘ ䷇ Āyou-see-linuxā, ⱘ 㞾Ѣ 㜞 ↡Āmuā 㣅 ↡ĀCāⱘ㒧 DŽĀmuāҷ㸼Ā āП ˈ ↡ĀCāҷ㸼Ā āˈ ҹҢ 䴶Ϟ ҹⳟ ⱘ Нˈ Ā 乚 ЁⱘLinux㋏㒳āDŽЎњ䰡Ԣ⹀ӊ 䖤㸠 㗫ˈ ϔ㉏CPU 䆒䅵Ё ⍜њ ㅵ⧚ ˄Memory Management Unitˈҹϟㅔ⿄MMU˅ 㛑῵ DŽ ˈ䖤㸠Ѣ䖭㉏≵ MMUⱘCPUПϞⱘ䛑 ϔѯ ㅔ ⱘ ӏ ԰㋏㒳ˈ 㗙 ㅔ ⱘ ⿟ ˈ⫮㟇ḍ ≵ ԰㋏㒳㗠Ⳉ 䖤㸠 ⫼⿟ DŽ 䖭⾡ ϟˈ㋏㒳 ⊩䖤㸠 ⱘ ⫼⿟ ˈ 㗙 ⥛ Ԣˈ㗠Ϩˈ ⱘ ⫼⿟ 䳔㽕䞡 ˈ 㽕∖⿟ њ㾷⹀ӊ⡍ DŽ䖭ѯ䛑䰏⹡њ ⫼Ѣ䖭㉏CPU ПϞⱘ ѻ ⱘ䗳 DŽ✊㗠ˈ䱣ⴔuClinuxⱘ䆲⫳ˈ䖭ϔ 䛑 њDŽuClinuxҢLinux 2.0/2.4 Ḍ⌒⫳㗠 ˈ⊓㺁њЏ⌕Linuxⱘ㒱 䚼 ⡍ DŽ ϧ䮼䩜 ≵ MMUⱘCPUˈ ϨЎ ㋏㒳 њ䆌 ⱘ ԰DŽ䗖⫼Ѣ≵ 㰮 ㅵ⧚ ˄MMU˅ⱘ ⧚ ˈ՟ ARM7TDMIDŽ 䗮 ⫼Ѣ Flash ⱘ ㋏㒳DŽuClinux Ўњ ≵ MMUⱘ ⧚ 㗠 Linux԰ ⱘ ℷDŽ ⬭њ ԰㋏㒳ⱘ ⡍ ˈЎ⹀ӊ ⱘ䖤㸠 ⾡⿟ կњ 䆕DŽ GNU䗮⫼ 䆌 䆕˄GNU GPL˅ⱘ 䆕ϟˈ䖤㸠uClinux ԰㋏㒳ⱘ⫼ ҹՓ⫼ Т ⱘLinux API ˈϡӮ Ў≵ MMU㗠 DŽ⬅ѢuClinux ⱘLinux ⸔Ϟ䖯㸠њ䗖 ⱘ㺕 Ӭ ˈ њϔϾ催 Ӭ ⱘǃҷⷕ㋻ ⱘ Linuxˈ㱑✊ ⱘԧ⿃ ˈuClinux ҡ✊ ⬭њLinuxⱘ ⱘӬ⚍˖〇 ǃ㡃 ⱘ⿏ỡ ǃӬ⾔ⱘ㔥㒰 㛑ǃ ⱘ ⾡ ӊ㋏㒳ⱘ ǃҹ Є ⱘAPIㄝDŽ 7.1ЎuClinuxⱘ DŽ7.1uClinuxⱘBoot Loader˖䋳䋷Linux Ḍⱘ ˈ ⫼Ѣ ㋏㒳䌘⑤ˈ SDRAMDŽ䖭䚼 ҷⷕ⫼Ѣ ゟLinux Ḍ䖤㸠⦃ ҢFlashЁ㺙䕑 ramdiskDŽḌ ˖Linux Ḍⱘ ⚍ start_kernel˄˅ DŽ Ḍⱘ Ҫ䚼 ˈ 㦋ˈIRQ䗮䘧ˈ䇗 ˈ䆒 偅 ˈ 䖳 ⦃ˈ 䞡㽕ⱘ 㛑 forkĀinitā䖯⿟ˈҹ Ͼ ӏ ⦃ DŽ㋏㒳䇗⫼ / 㦋 ˖ 㸠 Āinitā⿟ ˈ Ḍ ⿟ ⌕ϡ Ⳉ ⱘ ˈℸ ˈ ⱘ԰⫼ҙҙ ⧚ ℹџӊ(՟ ⹀ӊЁ ) Ў㋏㒳䇗⫼ կ䖯⿟DŽ䆒 偅 ˖䆒 偅 њLinux Ḍ 䚼 DŽ Ҫ ԰㋏㒳ϔḋˈ䆒 偅 Ў Ӏ ⱘ⹀ӊ䆒 ԰㋏㒳 կ DŽӊ㋏㒳˖Linux 䞡㽕ⱘ⡍ Пϔ ⾡ ӊ㋏㒳ⱘ DŽ䖭⾡⡍ Փ Linux Ҫ ԰㋏㒳 DŽ ӊ㋏㒳ⱘὖ Փ ⫼ 㛑 ⳟ 䆒 Ϟⱘ ӊ 䏃 㗠 乏㗗㰥 䰙⠽⧚䆒 ⱘ ӊ㋏㒳㉏ DŽLinux䗣 ⱘ 䆌 ϡ ⱘ ӊ㋏㒳ˈ ⾡ 㺙ⱘ ӊ ӊ㋏㒳ҹϔϾ ⱘ㰮 ӊ㋏㒳ⱘ ⦄㒭⫼ DŽϟ䴶ҟ㒡ϔѯ uClinuxⳌ ⱘⶹ䆚DŽ1ǃ MMU(内存管理单元)和VM(虚拟内存)䆌 ⧚ 䛑⬅Ѣ≵ MMU㗠ϡ 㰮 DŽ≵ ㅵ⧚ ⱘ ㅔ њ㢃⠛䆒䅵ˈ䰡Ԣњѻ DŽ⬅Ѣ ⱘ 䆒 ≵ ⺕Ⲭ 㗙 䰤ⱘ ぎ䯈ˈ ҹ 䳔 ⱘ ㅵ⧚ DŽԚ ⬅Ѣ≵ MMUⱘㅵ⧚ˈ ԰㋏㒳 ぎ䯈 ≵ ⱘˈ ⿟ 䆓䯂ⱘ 䛑 䰙⠽⧚ DŽԚҢ ㋏㒳ϔ㠀䛑 ⦄ ⾡⡍ 㛑ⱘ㾦 㗗㰥ˈ Ѣ ㅵ⧚ⱘ㽕∖ ҹ⬅⿟ Ҏ 㗗㰥DŽ2、实时性的支持uClinux 䑿 ϡ ˈⳂ ϸ⾡ϡ ⱘ Ḝ կuClinux ⱘ ˈ Ӏ RTLinux(RTL) RTA I(Real Time A pplication Interface)DŽ њ䖭ϸ⾡ ḜˈuClinux ҹ ⫼ 㽕∖䕗催ⱘ DŽ3、平台支持uClinuxⱘ 䫒˖uClinux䗮 ⫼ ⱘGNU 䫒DŽ㒣䖛 ⱘ 䫒 ϔѯ催㑻⡍ ˈ↨ XIP(Execute-In-Place) ˈ ѿ ㄝDŽuClinux 䗖⫼ⱘ ˖uClinux䗖⫼Ѣ 㔫 ⱘColdFire/DragonballˈARM㋏ (՟ Atmel, TI, Samsungㄝ⫳ѻⱘ㢃⠛)ˈIntel i960, Sparc (՟ MMUⱘLEON), NEC v850ˈ⫮㟇 ⱘ 㓐 ( CLPD )ⱘCPUḌˈ↨ OPENcoreDŽ4、与标准Linux的兼容性uClinux䰸њϡ㛑 ⦄fork()㗠 Փ⫼vfork() ˈ ԭuClinuxⱘAPI Ϣ Linux ⱘ Ⳍ DŽ䖭 ϡ ⴔuClinuxϡ㛑 ⦄ 䖯⿟ˈ 䰙ϞuClinux 䖯⿟ㅵ⧚ 䗮䖛vfork() ⦄ⱘˈ 㗙 䖯⿟ҷ ⠊䖯⿟ 㸠ˈⳈ 䖯⿟䇗⫼exit() 䗔 ˈ 㗙 䖯⿟䇗⫼exec() 㸠ϔϾ ⱘ䖯⿟DŽ ⱘLinux ⫼⿟ ҢLinux ԰㋏㒳⿏ỡ uClinux㋏㒳 ˈ Тϡ⫼ ҔМ ⱘ ˈ ҹ 䖒 ϔϾ ⫼⿟ ⱘ㽕∖(՟ ⧚ⱘ䌘⑤Փ⫼)DŽuClibc libc( ⫼Ѣ Linuxⱘ ) њ ЎuClinux կњ Ў㊒ㅔⱘ ⫼⿟ DŽ5、网络的支持uClinux ϔϾ ⱘTCP/IP 䆂ˈ 䖬 䆌 Ҫ㔥㒰 䆂DŽuClinux Ѣ ㋏㒳 䇈 ϔϾ㔥㒰 ⱘ ԰㋏㒳DŽ6、应用领域uClinux ⊯ ⫼Ѣ ㋏㒳Ёˈ՟ VPN䏃⬅ /䰆☿ ˈ ⫼ ԰㒜ッˈ 䆂䕀 ˈIP⬉䆱ˈ Ϯ ˈInternet ˈPDA䆒 ㄝDŽuClinux њϔϾ ℹ䅸䆚П ˈ 㽕 䇏㗙ҟ㒡 Ё Ў 䘡Փ⫼ⱘ㓪䆥 GNU GCCDŽ7.2 GNUⱘՓ⫼GCC(gcc)ⱘϡ Փ䆌 Ϯ㓪䆥 䛑Ⳍ 㾕㒠ˈGCC⬅GNU ҎRichard Stallman佪 ˈ GNUⱘ ѻ ˈ⬅ѢUNIX ⱘ催 ⿏ỡ ˈGCC Т ⾡ 㾕ⱘUNIX Ϟ䛑 ˈ Փ Win32/DOSг GCCⱘ⿏ỡDŽ↨ 䇈SUNⱘSolaris ԰㋏㒳䜡㕂ⱘ㓪䆥 GNUⱘGCCDŽGNU䕃ӊ C㓪䆥 GCCˈC++㓪䆥 G++ˈ∛㓪 ASˈ䫒 LDˈѠ䖯 䕀 (OBJCOPYˈOBJDUMP)ˈ䇗䆩 (GDBˈGDBSERVERˈKGDB) Ѣϡ ⹀ӊ ⱘ DŽ GNU GCC ϟ⫼ ҹՓ⫼⌕㸠ⱘC/C++䇁㿔 ⫼⿟ ˈ⒵䎇⫳ 催 ⥛䖤㸠ҷⷕǃ ⱘ㓪⿟䇁㿔ⱘ⫼ 䳔∖DŽ䖭ѯ 䛑 GPL⠜ ˈӏԩҎ ҹҢ㔥Ϟ㦋 䚼ⱘ⑤ҷⷕˈ 䳔Փ⫼ӏԩ䌍⫼DŽ ѢGNU 䆌 䆕 䆂ⱘ䆺㒚䌘 ˈ䇏㗙 ҹ ⳟGNU㔥キⱘҟ㒡ˈ/home.htmlDŽGNU 䛑 䞛⫼ Ҹ㸠ⱘ ˈ⫼ 䍋 Ⳍ ↨䕗 䲒ˈϡ ѢWindows ㋏㒳ⱘ ⫼ˈԚ GNU ⱘ ⬅Ѣ 䌈䖥㓪䆥 ԰㋏㒳ⱘ ˈ կњ ⱘ♉⌏ DŽϔ д њⳌ ˈ њ㾷њ㋏㒳䆒䅵ⱘ ⸔ⶹ䆚DŽ䖤㸠ѢLinux ԰㋏㒳ϟⱘ㞾⬅䕃ӊGNU gcc㓪䆥 ˈϡҙ ҹ㓪䆥Linux ԰㋏㒳ϟ䖤㸠ⱘ ⫼⿟ ˈ䖬 ҹ㓪䆥Linux Ḍ 䑿ˈ⫮㟇 ҹ԰Ѹ 㓪䆥ˈ㓪䆥䖤㸠Ѣ CPUϞⱘ⿟ DŽ ҹˈ 䖯㸠 ㋏㒳 ⫼⿟ ˈ䖭ѯ њ Ⲟ ⊯ⱘ ⫼DŽ7.2.1 GCC㓪䆥GCC GNU㒘㒛ⱘ 䌍C㓪䆥 ˈLinuxⱘ 㔎ⳕ 㺙ⱘ 䖭⾡DŽ ⌕㸠ⱘ㞾⬅䕃ӊ⑤ҷⷕ 䛑㛑 GCC㓪䆥 ϟ㓪䆥䖤㸠DŽ ҹ GCC㓪䆥 ⱘՓ⫼ 䆎 Ѣ㓪䆥㋏㒳 Ḍ䖬 㞾 ⱘ ⫼⿟ 䛑 ⱘDŽϟ䴶䗮䖛ϔϾ ԧⱘ՟ ˈ д ԩՓ⫼GCC㓪䆥 DŽLinux ԰㋏㒳Ёˈ ϔϾ⫼ C䇁㿔 ⱘ⑤⿟ 䖯㸠㓪䆥ˈ㽕Փ⫼GNUⱘgcc 㓪䆥 DŽ՟ ϟ䴶ϔϾ䴲 ㅔ ⱘHello⑤⿟ (hello.c)˖/******************************************************** Institute of Automation, Chinese Academy of Sciences* File Name˖hello.c* Description˖introduce how to compile a source file with gccNie* Author˖Xueyuan* Date˖*******************************************************/void main(){printf("Hello the world\n")˗}㽕㓪䆥䖭Ͼ⿟ ˈ Ӏ 㽕 Linuxⱘbash ⼎ヺϟ䕧 Ҹ˖$gcc -o hello hello.cgcc 㓪䆥 Ӯ⫳ ϔϾhelloⱘ 㸠 ӊDŽ hello.cⱘ Ⳃ ϟ 㸠./hello ҹⳟ ⿟ ⱘ䕧 㒧 ˈ Ϟ ĀHello the worldāⱘ ヺІ DŽҸ㸠Ё gcc㸼⼎ ⫼gcc 㓪䆥⑤⿟ ˗-o outputfilename䗝乍㸼⼎㽕∖㓪䆥 ⫳ ӊ Ўoutputfilenameⱘ 㸠 ӊˈ ϡ -o䗝乍ˈ 㔎ⳕ ӊ a.outDŽ 䖭䞠⫳ ӊ Ўhelloⱘ 㸠 ӊˈ㗠hello.c Ӏⱘ⑤⿟ ӊDŽgcc ϔϾ Ⳃ ⱘ DŽgcc ⱘ⫼⊩ ˖gcc [options] file... ˈЁⱘoption ҹ- ⱘ ⾡䗝乍ˈfile Ⳍ ⱘ ӊ DŽ Փ⫼gccⱘ ˈ 乏㽕㒭 㽕ⱘ䗝乍 ӊ DŽgccⱘ Ͼ㓪䆥䖛⿟ˈ 䋼Ϟ ℹ䖯㸠ⱘˈ↣ϔℹ ϔϾ⡍ ⱘ ԰ˈ䖭 ℹ ˖乘 ⧚ˈ㓪䆥ˈ∛㓪 䫒 DŽ ԧ ϔℹˈ ⬅gcc 䴶ⱘ 䗝乍 ӊ㉏ ⱘDŽ⏙Ἦⱘ 㓪䆥 䖲 䞡㽕ⱘDŽ㓪䆥 Փ⫼⑤ ӊ㓪䆥ѻ⫳ ⾡ ⱘⳂ ӊ(object files)DŽ 䖭Ͼ䖛⿟Ёˈ 䚼ⱘヺ ⫼ ≵ 㹿㾷䞞 ˈ✊ ӀՓ⫼䫒 䫒 䖭ѯⳂ ӊ ϔѯ ⱘ ӊˈ ⫳ ϔϾ 㸠 ӊDŽ 䖭Ͼ䖛⿟ЁˈϔϾⳂ ӊЁ ⱘ ӊЁⱘヺ ⱘ ⫼㹿㾷䞞ˈ ϡ㛑㹿㾷䞞ⱘ ⫼ˈϔ㠀 ҹ䫭䇃 ⱘ DŽgcc㓪䆥 䆌 䗝乍ˈԚ Ѣ 䗮⫼ 䇈 㽕ⶹ䘧 Ё ⫼ⱘ Ͼ њDŽ 䖭䞠Ў䇏㗙 Ͼ ⫼ⱘ䗝乍˖-o䗝乍㸼⼎㽕∖㓪䆥 ⫳ ӊ ⱘ 㸠 ӊ˗-c䗝乍㸼⼎ 㽕∖㓪䆥 䖯㸠㓪䆥ˈ㗠ϡ㽕䖯㸠䫒 ˈ⫳ ҹ⑤ ӊⱘ ӊ Ԛ㓔⬅.c .cc .oⱘⳂ ӊ˗-g䗝乍㽕∖㓪䆥 㓪䆥ⱘ կҹ ⿟ 䖯㸠䇗䆩ⱘ ˗-E䗝乍㸼⼎㓪䆥 ⑤ ӊ 䖯㸠乘 ⧚ ℶˈ㗠ϡ 㓪䆥ˈ∛㓪 䫒 ˗-S䗝乍㸼⼎㓪䆥 䖯㸠㓪䆥ˈ㗠ϡ ∛㓪 䫒 ˗-O䗝乍 㓪䆥 ⿟ կⱘ㓪䆥Ӭ 䗝乍ˈ 㓪䆥ⱘ Փ⫼䆹䗝乍ˈ ҹՓ⫳ ⱘ 㸠 ӊⱘ 㸠 ⥛ 催˗-Wall䗝乍 ѻ⫳ 䚼ⱘ䄺 DŽԴⱘ⑤ҷⷕЁ ѯ ˈ 㓪䆥ⱘ 㽕䫒 ⹂ ⱘ ˈ↨ ҷⷕЁ њ ѯ ˈ LinuxϟˈЎњՓ⫼ ˈ 乏 䫒 ˈЎℸ㽕 -lm 䗝乍DŽг䆌 䇏㗙Ӯ䯂ˈ 䴶䙷Ͼ՟ Փ⫼printf ⱘ Ўԩ≵ 䫒 ˛ gccЁ Ѣϔѯ ⫼ ⱘ ⦄ˈgcc㓪䆥 Ӯ㞾 䫒 ϔѯ ⫼ ˈ䖭ḋ⫼ ≵ 㽕㞾 њDŽ 㓪䆥⿟ ⱘ 䖬㽕 ⱘ䏃 ˈ䖭Ͼ 㽕⫼ 㓪䆥 ⱘ-L䗝乍 䏃 DŽ↨ 䇈 Ӏ ϔϾ /home/hoyt/mylibϟˈ䖭ḋ Ӏ㓪䆥ⱘ 䖬㽕 Ϟ-L/home/hoyt/mylibDŽ Ѣϔѯ 䇈ˈ≵ 㽕 䏃 DŽ 㽕 Ӏ 䍋㔎ⳕ ⱘ䏃 ϟ ҹњˈgcc 䫒 ⱘ Ӯ㞾 䙷ѯ ⱘDŽGNU㓪䆥 ⫳ ⱘⳂ ӊ㔎ⳕḐ Ўelf(executive linked file)Ḑ ˈ䖭 Linux㋏㒳 䞛⫼ⱘ 㸠䫒 ӊⱘ䗮⫼ ӊḐ DŽelfḐ ⬅㢹 ↉(section)㒘 ˈ ≵ ⡍ ˈ⬅ c⑤ҷⷕ⫳ ⱘⳂ ӊЁ ҹϟ↉˖.text(ℷ ↉) ⿟ ⱘ Ҹҷⷕˈ.data( ↉) ⱘ ˈ 䞣ˈ ヺІㄝˈ.bss( ↉) ⱘ 䞣 㒘ㄝDŽ䇏㗙㢹 ⶹ䘧 ⱘ䗝乍 ⫼⊩ˈ ҹ ⳟgccⱘ ḷˈ䙷䞠 䆌 䗝乍ⱘ䆺㒚䇈 DŽњ⑤ ӊhello.c ˈ䳔㽕䞡 㓪䆥 ˖$gcc -c hello.c✊ 䞡 䫒 ⫳ ˖$gcc –o hello.oѢ ՟ˈ Ў ϔϾ⑤ ӊˈ ҹ њ⑤ⷕ ˈ䖯㸠䞡 ⱘ㓪䆥䫒 ⱘ䖛⿟ ϡ 㐕⧤ˈԚ ˈ ϔϾ ⿟Ё њ㢹 ⱘ⑤ⷕ ӊˈ㗠䖭ѯ⑤ⷕ ӊЁⱘ Ͼ Ͼ 㹿 Ҫ⑤ⷕ ӊ ˈ䙷Мˈ ϔϾ ӊ㹿 ˈ ⱘ䙷ѯ⑤ ӊ䛑㽕䖯㸠䞡 㓪䆥䫒 ˈ ԰䞣 㗠ⶹⱘDŽ 䖤ⱘ ˈGNU կњՓ䖭Ͼℹ偸 ㅔ ⱘ ˈ ϟ䴶㽕ҟ㒡㒭 ⱘGNU Make DŽ7.2.2 GNU Makemake 䋳䋷Ң乍Ⳃⱘ⑤ҷⷕЁ⫳ 㒜 㸠 ӊ Ҫ䴲⑤ҷⷕ ӊⱘ DŽmake Ҹ 䑿 ⾡ ˖ ǃ Нǃ 䗄 ӊ Ⳃ ӊ DŽ Ў˖make [flags] [macro definitions] [targets]Unix㋏㒳ϟ ԡflags䗝乍 НЎ˖-f file file ӊЎ 䗄 ӊˈ file Ў '-' ヺˈ䙷М 䗄 ӊ 䕧 DŽ ≵ '-f' ˈ ㋏㒳 咬䅸 Ⳃ ϟ Ўmakefile 㗙 ЎMakefileⱘ ӊЎ 䗄 ӊDŽ LinuxЁˈ GNU make ԰Ⳃ Ё ✻GNUmakefileǃmakefileǃMakefileⱘ乎 ㋶ makefile ӊDŽ-i ⬹ Ҹ 㸠䖨 ⱘ 䫭 DŽ-s≝咬῵ ˈ 㸠П ϡ䕧 Ⳍ ⱘ Ҹ㸠 DŽ-r⽕ℶՓ⫼䱤 㾘 DŽ-n䴲 㸠῵ ˈ䕧 㸠 ҸˈԚ ϡ 㸠DŽ-t Ⳃ ӊDŽ-q make ԰ ḍ Ⳃ ӊ 㒣 䖨 "0" 䴲"0"ⱘ⢊ DŽ-p䕧 Н Ⳃ ӊ 䗄DŽ-d Debug῵ ˈ䕧 ӊ Ẕ⌟ 䯈ⱘ䆺㒚 DŽLinuxϟmake ԡⱘ ⫼䗝乍ϢUnix㋏㒳Ё⿡ ϡ ˈϟ䴶 њϡ 䚼 ˖-c dir 䇏 makefile П ⱘⳂ dirDŽ-I dir Ҫ makefile ӊ ˈ ⫼䆹䗝乍 ㋶Ⳃ DŽ-h help ˈ ⼎ ⱘmake䗝乍DŽ-w ⧚ makefile П П ˈ䛑 ⼎ ԰Ⳃ DŽ䗮䖛 Ҹ㸠 Ёⱘtarget ˈ make㽕㓪䆥ⱘⳂ ˈ Ϩ 䆌 Н㓪䆥 ϾⳂ ˈ ԰ ✻Ң ⱘ乎 ձ⃵㓪䆥target䗝乍Ё ⱘⳂ ӊDŽ Ҹ㸠Ё≵ Ⳃ ˈ ㋏㒳咬䅸target 䗄 ӊЁ㄀ϔϾⳂ ӊDŽmake ԩ ⦄ ⑤ҷⷕⱘ ԰ 䗮䖛ϔϾ㹿⿄ПЎmakefileⱘ ӊ ⱘˈ ϟ䴶ⱘ 㡖䞠ˈЏ㽕 䇏㗙ҟ㒡ϔϟmakefileⱘⳌ ⶹ䆚DŽ7.2.2.1 makefile 㒧GNU Make ⱘЏ㽕 ԰ 䇏ϔϾ ӊ makefileDŽmakefile ⫼bash䇁㿔 ⱘˈbash 䇁㿔 BASIC䇁㿔ⱘϔ⾡ Ҹ㾷䞞䇁㿔DŽ䖭Ͼ ӊ䞠Џ㽕 䗄њ ѯⳂ ӊ Ң ѯձ䌪 ӊЁѻ⫳ⱘˈ ⫼ԩ⾡ Ҹ 䖯㸠䖭Ͼѻ⫳䖛⿟ⱘDŽ њ䖭ѯ ˈ make ӮẔ ⺕Ⲭⱘ ӊˈ Ⳃ ӊⱘ ( 䆹 ӊ⫳ ⱘ )㟇 ↨ ⱘϔϾձ䌪 ӊ ⱘ䆱ˈmake Ӯ 㸠Ⳍ ⱘ Ҹˈҹ Ⳃ ӊDŽmakefileϔ㠀㹿⿄Ў“makefile” “Makefile”DŽ䖬 ҹ make ⱘ Ҹ㸠Ё ⱘ ӊ DŽ ≵ ⡍ ⱘ䆱ˈmake Ӯ “makefile” “Makefile”ˈ ҹЎњㅔ 䍋㾕ˈ 䆂䇏㗙Փ⫼䖭ϸ DŽ 㽕Փ⫼ Ҫ ӊ԰Ў makefileˈ ⫼㉏Ԑϟ䴶ⱘ make Ҹ䗝乍 makefile ӊ˖$ make -f makefilenameϔϾ makefile Џ㽕 ϔ㋏ ⱘ㾘 ˈ ϟ˖Ⳃ ӊ : ձ䌪 ӊ(tab䬂) Ҹ㄀ϔ㸠⿄ПЎ㾘 ˈ㄀Ѡ㸠 㸠㾘 ⱘ Ҹˈ 乏㽕ҹtab䬂 DŽϟ䴶ВϔϾㅔ ⱘmakefileⱘ՟ DŽexecutable : main.o io.ogcc main.o io.o -o executablemain.o : main.cgcc -Wall -O -g -c main.c -o main.oio.o : io.cgcc -Wall -O -g -c io.c -o io.o䖭 ϔϾ ㅔ ⱘ makefileˈmakeҢ㄀ϔ 㾘 ˈexecutable makefile 㒜㽕⫳ ⱘⳂ ӊDŽ㒭 ⱘ㾘 䇈 executableձ䌪ѢϸϾⳂ ӊmain.o io.oˈ 㽕executable ↨ ձ䌪ⱘ ӊЁⱘӏԩϔϾ ⱘ䆱ˈϟϔ㸠ⱘ Ҹ Ӯ㹿 㸠DŽԚ ˈ Ẕ ӊ main.o io.o ⱘ П ˈ Ӯ ϟ 䙷ѯ main.o io.o ЎⳂ ӊⱘ㾘 DŽmake њ Ѣ main.o ⱘ㾘 ˈ䆹Ⳃ ӊⱘձ䌪 ӊ main.cDŽmakefile 䴶ⱘ ӊЁ гϡ ⫳ 䖭Ͼձ䌪 ӊⱘ㾘 њDŽℸ ˈmake Ẕ ⺕ⲬϞ䖭Ͼձ䌪 ӊⱘ ˈ 䖭Ͼ ӊⱘ ↨main.o ⱘ䆱ˈ䙷М䖭Ͼ㾘 ϟ䴶ⱘ Ҹgcc -c main.c –o main.o Ӯ 㸠ˈҹ ӊ main.o DŽ ḋmake ӊio.o ㉏ԐⱘẔ ˈ ⱘձ䌪 ӊ io.cˈ io.oⱘ ⧚ main.o㉏ԐDŽ⦄ ˈ ㄀ϔϾ㾘 ˈ ϸϾ㾘 ЁⱘӏԩϔϾ㹿 㸠ˈ 㒜ⱘⳂ ӊexecutable䛑䳔㽕䞡 ( Ўexecutable ձ䌪ⱘ ЁϔϾ .o ӊ Ӯ↨ )ˈ ℸ䫒 Ҹ Ӯ㹿 㸠DŽњmakefileˈ ӏԩϔϾ⑤ ӊ䖯㸠 ˈ ձ䌪Ѣ䆹 ӊⱘⳂ ӊ䛑Ӯ㹿䞡 㓪䆥( Ў.o ӊձ䌪Ѣ.c ӊ)ˈ䖯㗠 㒜 㸠 ӊӮ㹿䞡 䫒 ( Ў ձ䌪ⱘ.o ӊ㹿 њ)ˈ гϡ⫼ ϔϾϾ њDŽ7.2.2.2㓪 makeǃ Нmakefile 䞠ⱘ ⱘˈϔ㠀䛑Փ⫼ ↡DŽ Ӏ Т ҹҢӏԩ 㹿 ⫼ˈ ҹҷ㸼 ㉏ ˈ՟ ҹ ӊ 㸼ˈ 㸠 ӊ 㓪䆥 ㄝDŽ㽕 НϔϾ ˈ makefileЁˈӏ ϔ㸠ⱘ ϟ䆹 ˈ 䴶䎳ϔϾㄝ ˈㄝ 䴶 㽕䆒 ⱘ䖭Ͼ ⱘ DŽ ҹ 㽕 ⫼ 䆹 ˈՓ⫼ $ ( )ˈ 㗙 ${ }ˈ⊼ ϔ 㽕 㢅 П DŽ Ϟϔ 㡖 Вⱘ՟ ˈ⫼ ⱘ ⊩ˈ ҹ ϟ䴶ⱘ ˖OBJS = main.o io.oCC = gccCFLAGS = -Wall -O -gexecutable: $(OBJS)$(CC) $(OBJS) -o executablemain.o : main.c$(CC) $(CFLAGS) -c main.c -o main.oio.o : io.c$(CC) $(CFLAGS) -c io.c -o io.o䖭ϾmakefileЁ њϝϾ Нˈ ҹ 䖭ѯ Ёⱘ ѯ ⫳ ˈ 㗙 䳔 㽕 ⱘ ˈ Ў㽕∖ⱘ ˈmakefileЁ⫼ 䖭ѯ ⱘ Ӯ㞾 DŽ makeЁ䖬 ϔѯ 㒣 Н ⱘ 䚼 䞣ˈ Ͼ䕗 ⫼ⱘ 䞣 $@ˈ $< ˈ$?ˈ$*, $^ (⊼ ˖䖭ѯ 䞣ϡ䳔㽕 ԣ)DŽ$@ Ў 㾘 ⱘⳂ ӊ ˗$< Ў 㾘 ձ䌪 ӊ 㸼Ёⱘ㄀ϔϾձ䌪 ӊ˗$? Ў ⱘ ↨ 㾘 ⱘⳂ ӊⱘ ⱘձ䌪 ӊˈ䆹 Փ⫼ 㾘 Ӯ㹿Փ⫼˗$* 㾘 ЁⳂ ӊ ձ䌪 ӊ ѿⱘ ӊ ˈϡ ˗$^ Ў Ͼձ䌪 ӊⱘ 㸼(䰸 њ 䞡 ⱘ ӊ )DŽ⫼䖭ѯ 䞣ˈ ҹ Ϟ䴶ⱘ makefile ˖OBJS = main.o io.oCC = gccCFLAGS = -Wall -O -gexecutable: $(OBJS)$(CC) $^ -o $@main.o : main.c$(CC) $(CFLAGS) –c $< -o $@io.o : io.c$(CC) $(CFLAGS) -c $< -o $@ҹ 䞣 ⫼ Ҫ䆌 ˈ Ӏ ⏋ Փ⫼ⱘ ˈℷ⹂Փ⫼ ˈӮ㒭 㗙 ⱘ DŽ2ǃ䱤 㾘䇋⊼ ˈ Ϟ䴶ⱘ՟ 䞠ˈ Ͼѻ⫳ .o ӊⱘ Ҹ䛑 ҹ.c ӊ԰Ўձ䌪 ӊѻ⫳ .o Ⳃ (obj) ӊˈ䖭 ϔϾ ⱘ⫳ Ⳃ ӊⱘℹ偸DŽ ⫳ main.o io.oⱘ㾘 ҢmakefileЁ 䰸ˈmake Ӯ ⱘ䱤 㾘 ˈ✊ Ӯ ϔϾ䗖 ⱘ Ҹ 㸠DŽ 䰙Ϟmake 㒣ⶹ䘧䆹 ԩ⫳ 䖭ѯⳂ ӊˈ Փ⫼ 䞣 CC Ў㓪䆥 ˈ ϨӴ䗦 CFLAGS㒭 C 㓪䆥 (CXXFLAGS⫼Ѣ C++ 㓪䆥 )ˈCPPFLAGS(C乘 ⧚䗝乍)ˈTARGET_ARCH ( Ⳃ ՟ 㗠㿔ˈ䖬ϡ⫼㗗㰥䖭Ͼ )ˈ✊ 䗝乍 -c ˈ 䴶䎳乘 Н $<(㄀ϔϾձ䌪 ӊ )ˈ 乍 -oˈ 䎳乘 Н $@ (Ⳃ ӊ )DŽϔϾ˟㓪䆥ⱘ ԧ Ҹ Ӯ ˖$(CC) $(CFLAGS) $(CPPFLAGS) $(TARGET_ARCH) -c $< -o $@make Ё ⱘ䖭ѯ 㕂ⱘ 䱤 ⱘ㾘 ˈ Нњ ԩҢϡ ⱘձ䌪 ӊ ゟ⡍ ㉏ ⱘⳂ DŽUnix㋏㒳䗮 ϔ⾡ Ѣ ӊ ӊ 㓔ⱘ䱤 㾘 DŽ䖭⾡ 㓔㾘 Нњ ԩ ϔϾ ⡍ ӊ 㓔ⱘ ӊ(՟ .c ӊ)ˈ䕀 Ў ϔ⾡ ӊ 㓔ⱘ ӊ(՟ .o ӊ)˖㋏㒳Ё咬䅸ⱘ ⫼ ӊ НЎ˖.oⳂ ӊ.c C⑤ ӊ.f FORTRAN⑤ ӊ.s∛㓪⑤ ӊ.y Yacc-C⑤䇁⊩.l Lex⑤䇁⊩㗠GNU make 䰸њ 㓔㾘 䖬 ϔ⾡㉏ ⱘ䱤 㾘 ῵ 㾘 DŽ䖭⾡㾘 䗮⫼ˈ Ў ҹ ⫼῵ 㾘 Н ⱘձ䌪 㾘 DŽ ⫼ НⳂ ձ䌪 ӊП䯈ⱘ ㋏ˈ՟ ϟ䴶ⱘ῵ 㾘 Нњ ԩ ӏ ϔϾ.c ӊ䕀 Ў ӊ Ⳍ ⱘ.o ӊ˖%.o : %.c$(CC) $(CFLAGS) $(CPPFLAGS) -c -o $@ $<3ǃӾⳂ䳔㽕 㒜ѻ⫳ϸϾ ⱘ 㸠 ӊˈԚ䖭ѯ ӊ ⳌѦ⣀ゟⱘˈг 䇈ӏԩϔϾⳂ ӊⱘ䞡 ˈϡӮ ҪⳂ ӊDŽℸ ˈ ҹ䗮䖛Փ⫼ 䇧ⱘӾⳂ 䖒 䖭ϔⳂⱘDŽϔϾӾⳂ ϔϾⳳℷⱘⳂ ӊⱘ ϔ Ѣˈ䖭ϾⳂ ӊ 䑿 ϡ DŽ ℸˈ make Ӯ 䆒 䳔㽕㹿⫳ ˈ make 䆹ӾⳂ ӊⱘ ձ䌪 ӊ䛑 ˈ Ӯ 㸠 ⱘ㾘 䞠ⱘ Ҹ㸠DŽВϔϾㅔ ⱘ՟ ˈ makefile 䕧all : executable1 executable2䖭䞠 executable1 executable2 㒜 ⫳ ⱘϸϾ 㸠 ӊDŽ make 䖭Ͼ 'all' Ў ⱘЏ㽕Ⳃ ˈ↣⃵ 㸠 䛑Ӯ 䆩 'all' DŽԚ ˈ⬅Ѣ䖭㸠㾘 䞠 ≵ Ҹ ԰⫼ ϔϾ 'all' ⱘ 䰙 ӊϞ(џ Ϟˈ all гϡӮ 䰙⫳ )ˈ ҹ䖭Ͼ㾘 ϡⳳⱘ 'all' ⱘ⢊ DŽ ✊䖭Ͼ ӊ ϡ ˈ ҹ make Ӯ 䆩 all 㾘 ˈ ℸ Ẕ ⱘձ䌪 ӊ executable1, exectable2 䳔㽕 ˈ 䳔㽕ˈ Ӏ ˈҢ㗠䖒 ⫳ ϸϾⳂ ӊⱘⳂⱘDŽӾⳂ makefileЁ ⊯Փ⫼DŽ4ǃmakefile 䞠ⱘ 䎳 ⱘ ⳌԐˈ Փ⫼ⱘ ˈ⫼ϔϾ $ ヺ 䎳 ˈ ˈぎḐ 䎳ϔ㋏ ⬅䗫 䱨ⱘ DŽ՟ ˈ GNU Make 䞠 ϔϾ Ў 'wildcard' ⱘ ˈ ϔϾ ˈ 㛑 ϔ ヺ ⬅ 䗄ⱘ ӊ ˈ ӊ䯈ҹぎḐ䯈䱨DŽ ҹ ϟ䴶 ⼎Փ⫼䖭Ͼ Ҹ˖SOURCES = $(wildcard *.c)䖭ḋӮѻ⫳ϔϾ ҹ '.c' 㒧 ⱘ ӊⱘ 㸼ˈ✊ 䞣 SOURCES 䞠DŽ ✊Դϡ䳔㽕ϔ 㽕 㒧 ϔϾ 䞣DŽϔϾ ⫼ⱘ patsubst (patten substitude, 䜡 ⱘ㓽 ) DŽ 䳔㽕ˏϾ ˖㄀ϔϾ ϔϾ䳔㽕 䜡ⱘ῵ ˈ㄀ѠϾ㸼⼎⫼ҔМ ˈ㄀ϝϾ ϔϾ䳔㽕㹿 ⧚ⱘ⬅ぎḐ 䱨ⱘ DŽ՟ ˈ ⧚䙷Ͼ㒣䖛Ϟ䴶 Н ⱘ 䞣ˈOBJS = $(patsubst %.c,%.o,$(SOURCES))䖭Ͼ䇁 ⧚ SOURCES Ёⱘ ӊ 㓔 '.c'ⱘ ӊˈ⫼ '.o' '.c' ҷDŽ⊼ 䖭䞠ⱘ % ヺ 䗮䜡ヺˈ 䜡ϔϾ Ͼ ヺˈ ↣⃵ 䜡ⱘ ヺІ ϔϾ‘ ’(stem) DŽ ㄀ѠϾ 䞠ˈ%㹿㾷䞞 ⫼㄀ϔ 䜡ⱘ䙷Ͼ DŽ䍷ⱘ䇏㗙 䳔㽕 䖯ϔℹⱘњ㾷ˈ䇋 㗗GNU Make DŽ7.2.2.3 makefileⱘϔϾ ԧ՟䖭䞠㒭䇏㗙ВϔϾㅔ ⱘmakefileⱘ՟ ˈ䗮䖛 䖭Ͼmakefileⱘ䆆㾷ˈ 䴶ҟ㒡ⱘⳌ ⶹ䆚DŽINCLUDES =-I/home/nie/mysrc/include \-I/home/nie/mysrc/extern/include \-I/home/nie/mysrc/src \-I/home/nie/mysrc/libsrc \-I. \-I..EXT_CC_OPTS = -DEXT_MODECPP_REQ_DEFINES = -DMODEL=tune1 -DRT -DNUMST=2 \-DTID01EQ=1 -DNCSTATES=0 \-DMT=0 -DHAVESTDIORTM_CC_OPTS = -DUSE_RTMODELCFLAGS = -O -gCFLAGS += $(CPP_REQ_DEFINES)CFLAGS += $(EXT_CC_OPTS)CFLAGS +=$(RTM_CC_OPTS)SRCS = tune1.c rt_sim.c rt_nonfinite.c grt_main.c rt_logging.c \ext_svr.c updown.c ext_svr_transport.c ext_work.cOBJS = $(SRCS:.c=.o)RM = rm –fCC = gccLD = gccall: tune1%.o : %.c$(CC) -c -o $@ $(CFLAGS) $(INCLUDES) $<tune1 : $(OBJS)$(LD) -o $@ $(OBJS) -lmclean :$(RM) $(OBJS)䖭ϾmakefileЁ佪 Нњ Ͼ ˖' INCLUDES =-I …'(ⳕ⬹ ҷ㸼-I 䴶ⱘ )ˈ'-I dirname' 㸼⼎ dirname ⱘⳂ ⿟ ӊⳂ 㸼Ё ˈ 䖯㸠乘 ⧚䖛⿟ЁՓ⫼ⱘ ˗' EXT_CC_OPTS = -DEXT_MODE ' 㸼⼎ ⿟ Ё Нњ EXT_MODEˈㄝӋѢ ⑤ҷⷕ 䇁 ' #define EXT_MODE ' ˗ϟ ⱘϸϾ НCPP_REQ_DEFINES RTM_CC_OPTS䍋 EXT_CC_OPTS ㉏Ԑⱘ԰⫼˗'CFLAGS =-O -g ' 㓪䆥 ⱘ㓪䆥䗝乍ˈ㸼⼎ 㓪䆥ⱘ䖛⿟Ё ҷⷕ䖯㸠 Ӭ ˈ ѻ⫳㛑㹿GNU䇗䆩 ( gdb)Փ⫼ⱘ䇗䆩 ˗'CFLAGS += ' 㸼⼎ 䖭Ͼ Н ⱘ ⸔Ϟ ⱘ ˗' SRCS = …'ҷ㸼њ 㽕㓪䆥ⱘ⑤ҷⷕ ӊ 㸼˗' OBJS = $(SRCS:.c=.o)'㸼⼎ SRC ҷ㸼ⱘ ҹ.c㒧 ⱘ ӊ ⫼.o㒧 ⱘ ӊ ˈ 㸼⼎ Ͼ⑤ ӊ ⱘⳂ ӊ ˗' RM = rm –f ' 㸼⼎ 䰸 Ҹˈ-f 䰸䗝乍ˈՓ⫼䆹ヺ ˈ ӊ䖯㸠 䰸 ˈ≵ ⼎˗' CC = gcc '㸼⼎㓪䆥 ⫼gcc˗' LD= gcc' 㸼⼎䫒 Ҹ ⫼gcc˗all clean ϸϾӾⳂ ˈ Փ⫼make Ҹⱘ ˈ ϡ Ⳃ ӊ ˈ ҹ makefile Ё ⦄ⱘ㄀ϔϾⳂ ԰Ў 㒜Ⳃ ˈ ҹ 䬂 Ҹmakeˈ ӾⳂ all㹿԰Ў 㒜ⱘⳂ 㗠 㸠ˈ⬅Ѣ䖭Ͼ ӊ ϡ ˈ ҹ make Ӯ 䆩 all 㾘 ˈ ℸ Ẕ ⱘձ䌪 ӊ tune1 䳔㽕 ˈ 䳔㽕ˈ ˈ䖭ḋӾⳂ ϟ䴶ⱘϸ 㾘 Ӯ㹿 㸠ˈҢ㗠⫳ 㸠 ӊtune1DŽ 㽕 㸠 䰸 Ҹˈ 䳔㽕䬂 Ҹmake cleanˈ Ӯ ҹ.o㒧 ⱘЁ䯈 ӊ 䰸DŽˈ䇋䇏㗙⊼ makefileⱘ՟ Ё ⃵⫼ ' \'ˈ䆹ヺ ⫼Ѣ makefileЁˈ ϔ 䇁 䖛䭓 ˈ ҹ⫼' \' 䖭 䇁 ⱘ 䖍⬠ˈ䗮䖛 䔺 㸠ˈՓϟ䴶 ϔ㸠ⱘ䇁 Ў䆹䇁 ⱘ㓁㸠DŽmakefile ӊЁˈ⫼ヺ ' #'԰Ў⊼䞞㸠䇁 ⱘ ˈҹ makefile ӊⱘ 䇏 DŽ ՟ 䆒makefile ӊ Ўmakefileˈ ✊г ✻ϾҎⱘ Ҫ ӊ ˈ ӊ ϡ makefileˈMakefileⱘ䆱ˈ ⫼make Ҹ ˈ䇋Փ⫼make –f makefilenameDŽ ℸˈ 䇏㗙㛑 make makefileⱘ Փ⫼DŽ7.2.3Փ⫼GDB䇗䆩⿟䆎 М䌘⏅ⱘ⿟ 㓪 ⱘ⿟ ˈ䛑ϡ 㛑ϔ⃵ Ӯ ˈ ⿟ 䖤㸠 ˈӮ ⦄䆌䆌 ϡ ⱘ䫭䇃ˈϔ ⳟ⿟ ⫼ ϡ ˈ ⱘ ⊩䗮䖛ϔѯ ↉䖯 ⿟ 䚼䖯㸠䇗䆩DŽ䗮 䇗䆩⿟ ⱘ 㛑 ҹϟϔѯ ˈ Ѣ 㗙 䫭䇃 ⱘDŽ1ˊ⿟ 䖤㸠 Ͼ䇁 㗙㸼䖒 ⫳њ䫭䇃˛2ˊ 䫭䇃 㸠ϔϾ ⱘ ⦄ⱘˈ䙷М ⿟ ⱘ ϔ㸠 њ䖭Ͼ ⱘ䇗⫼䇁 ˈ 䇗⫼䆹 ⱘ Ӵ䗦ⱘ ҔМ˛3ˊ ⿟ 㸠 ˈ ⱘ ϔϾ 䞣 Ў ˛4ˊ Ͼ㸼䖒 㒜䖤㸠ⱘ㒧 Ўԩ ˛䇗䆩 ( ⹂ 䇈 䆹⿄Ўヺ 䇗䆩 )㛑 Ϟ䗄Ⳃ DŽ ϔϾ㛑 䖤㸠 Ҫ⿟ ⱘ ⫼⿟ ˈ 䗮 НϞⱘ⿟ ⱘ ϔϡ П Ѣˈ䇗䆩 㛑 䖯 ⿟ ⑤ⷕЁˈ 䆌 㗙䖯㸠䗤㸠 ℹ䖤㸠ˈњ㾷⿟ ҷⷕ 㸠乎 ˈ ↣ 䇁 㸠ⱘ㒧 ˈ ҹ ⿟ 䖤㸠ⱘ ˈ ⳟ⫮㟇 ӏϔ 䞣 DŽ ⿟ 䖤㸠 䫭 ˈ Ў⿟ 㗙 կ⿟ 䖤㸠 ⱘ䆺㒚㒚㡖ˈҢ㗠 䫭ⱘ DŽ Linux㋏㒳Ёˈ ⫼ ⱘ GDB(GNU Degugger)DŽGDB GNU㞾 ⱘ䇗䆩 DŽ7.2.3.1 GDB ⫼ Ҹ㽕 Փ⫼gdbˈ 乏 ⑤ⷕ䖯㸠㓪䆥ⱘ ˈՓ⫼-g㓪䆥䗝乍 ˈ 䗮ⶹ㓪䆥 ˈ 㗙 䖯㸠⿟ 䇗䆩DŽ⫼њ-g䗝乍 ˈ⿟ 㓪䆥ⱘ Ӯ 䇗䆩 ˈ䖭ѯ䇗䆩 Ⳃ ӊЁˈ 䗄њ↣Ͼ 䞣ⱘ ㉏ ҹ ⑤ⷕ㸠 㸠ҷⷕ 䯈 ㋏ˈgdbℷ 䗮䖛䖭ѯ Փ⑤ⷕ ⷕⳌ 㘨ⱘˈ ⦄њ⑤ⷕ㑻ⱘ䇗䆩DŽЎњՓ⫼gdb䇗䆩ˈ 䳔㽕 Ҹ㸠Ё䕧 gdb filename(filename ⫼gcc㓪䆥⫳ ⱘ 㒜 㸠 ӊ )ˈ䆹䇁 Ϣ䇗䆩 ⱘ DŽ Ϟϔ 㡖Ё Вmakefile՟ 䇈ˈ 䬂 gdb tune1ˈ ϞӮ ⦄[nie@uClinux mysrc]$ gdb tune1GNU gdb Red Hat Linux 7.x (5.0rh-15) (MI_OUT)Copyright 2001 Free Software Foundation, Inc.GDB is free software, covered by the GNU General Public License, and you arewelcome to change it and/or distribute copies of it under certain conditions.Type "show copying" to see the conditions.There is absolutely no warranty for GDB. Type "show warranty" for details.This GDB was configured as "i386-redhat-linux"...(gdb)gdb㱑✊䖤㸠䍋 ˈԚ 㸠⿟ tune1 ≵ 䖤㸠ˈℸ gdb ⼎ヺϟⳈ 䬂 run Ҹ ˈ 㸠⿟ 䖤㸠ⱘ 䳔㽕䕧 Ҹ㸠 ˈ gdb ⼎ヺϟ ҹ䖭ḋ䬂 Ҹ˖run command-line-arguments ˈ 䕧 Ҹ˖tune1 command-line-argumentsϔḋˈ њ 㸠⿟ ⱘ䖤㸠DŽˈ Ӏ 㛑 ⚍䇗䆩⿟ ˈ䅽⿟ 㸠 ҷⷕ ℶ㒻㓁 㸠ϟ ˈℸ ҹՓ⫼ Ҹbreakˈ䆹 ҸⱘḐ Ўbreak placeˈ䖭䞠place ҹ ⿟ ҷⷕⱘ㸠 ˈ ˈ⫮㟇 ҹ ⫼break main ˈ䅽⿟ ⚍䆒㕂 ҷⷕϔ 㸠ⱘ ˈ↨ ѢϞ䴶Вⱘ 㸠 ӊ Ўtune1ⱘ՟ ˈ 䇗⫼њϔϾ ЎrtExtModeCheckInitⱘ ˈ 䅽⿟ 㸠 䆹 ℶˈ ҹ gdb ⼎ヺϟ䕧 ˖break rtExtModeCheckInitˈℸ Ϟ ⦄ϟ ˖Breakpoint 1 at 0x8049a28: file grt_main.c, line 604.DŽ ✊ˈг ҹՓ⫼㸠 䆒㕂Ё ԡ㕂ˈϞ䴶䆒㕂Ё ⱘ䇁 ҹㄝӋЎbreak 604ˈ ҹ Ϟⳟ Ⳍ ⱘ DŽ䆒㕂њ ⚍ ˈ⿟ Ӯ䖤㸠 ⚍ ϟ ˈℸ Ң Ϟ ҹ ㉏Ԑϟ䴶ⱘ ˖Breakpoint 1, main (argc=4, argv=0xbffffb84) at grt_main.c:604604 rtExtModeCheckInit();(gdb)Ͼ ⚍䰸 ˈ ҹ gdb ⼎ヺϟ䕧 Ҹ˖delete Nˈ䖭䞠N㸼⼎㄀ ϾЁ ˈ㄀ϔϾ䆒㕂ⱘЁ Ў1ˈ㄀ѠϾ䆒㕂ⱘ Ў2ˈձ⃵㉏ DŽ delete ϡ䎳ӏԩ ˈ 㸼⼎ 䆒㕂ⱘ ⚍䛑 䰸DŽ ⳟⳂ 䆒㕂 ⚍ⱘ ˈ ҹՓ⫼ Ҹinfo breakˈ Ӯ ⼎ ↣ϔϾ䆒㕂ⱘ ⚍ DŽgdb ⼎ヺϟՓ⫼help ҸˈӮ㒭 gdb ҸⱘϔϾㅔⷁ 䗄 Ҹ ㉏DŽ 㗙 䖯 ⿟ 䚼䖯㸠 ℹ䇗䆩ˈgdb կϸ⾡ Ҹկ䗝 ˈstep next Ҹˈϸ㗙ⱘ Ѣstep 㸠↣ϔ 䇁 ˈ 䘛 䇗⫼ˈӮ䏇䕀 䆹 Нⱘ 㸠 㸠ˈ㗠next ϡ䖯 䚼ˈ 䇗⫼䇁 ԰ 䗮ϔ 䇁 㸠 DŽcontinue Ҹ 㒻㓁䖤㸠⿟ ˈⳈ 䘛 ϟϔϾ ⚍ ⿟ 㒧 DŽՓ⫼㗙ҙҙ linuxⱘbash ⼎ヺϟ䕧 Ҹgdb ˈ њgdb㗠 ˈℸ ˈ 㽕 䕑 㸠 ӊˈ䳔㽕 gdb ⼎ヺϟ䬂 Ҹ˖file filename(filenameЎ 㸠 ӊ )ˈ⊼ 㸠 ӊⱘ 㗠ϡ ⑤ ӊ DŽ䇗䆩䖛⿟Ёˈ ⳟϔϾ 䞣 ⱘ ˈ ҹ gdb⦃ ϟ䕧 Ҹ˖watch variablename ˈ䖭䞠ⱘvariablename Դ 㾖 ⱘ 䞣 DŽ䖬 ϔϾ ҹ ⼎㸼䖒 ⱘ Ҹprintˈ Փ⫼㾘 Ўprint expressionnameˈ ЁexpressionnameЎ㽕 ⼎ⱘ㸼䖒 DŽ7.2.3.2 GDB ԧ䇗䆩 ՟ϟ䴶䗮䖛Փ⫼ϔϾㅔ ⱘ⿟ Փ䇏㗙䖯ϔℹ❳ ⫼gdbⱘ䇗䆩 ⊩DŽ⑤⿟ Ўexample1.cˈҷⷕ ϟ˖/******************************************************** Institute of Automation, Chinese Academy of Sciences* File Name˖example.c* Description˖ introduce how to use gdbNie* Author˖Xueyuan* Date˖*******************************************************/#include <stdio.h>static void display(int i, int *ptr);int main(void){int x = 5;int *xptr = &x;printf("In main():\n");printf(" x is %d and is stored at %p.\n", x, &x);printf(" xptr holds %p and points to %d.\n", xptr, *xptr);display(x, xptr);return 0;}void display(int z, int *zptr){printf("In display():\n");printf(" z is %d and is stored at %p.\n", z, &z);printf(" zptr holds %p and points to %d.\n", zptr, *zptr);}㽕Փ⫼gdb䇗䆩⿟ ˈϔ 㽕 㓪䆥⿟ ˈՓ⫼-g㓪䆥䗝乍ˈҹ⫳ ヺ 㸼( augmented symbol table)ˈ կ䇗䆩 DŽ佪 Փ⫼gcc –g –o example1 example.c ⑤ҷⷕ䖯㸠㓪䆥ˈ䖭ḋ ҹՓ⫼gdbⲥ㾚example1ⱘ 㸠㒚㡖DŽ bash ⼎ヺϟˈ䬂 Ҹ:gdb example1ˈ њ 㸠 ӊexample1 ⱘ䇗䆩ˈ ϞӮ ⦄ϟ䴶ⱘ ˖[nie@uClinux nie]$ gdb example1GNU gdb Red Hat Linux 7.x (5.0rh-15) (MI_OUT)Copyright 2001 Free Software Foundation, Inc.GDB is free software, covered by the GNU General Public License, and you arewelcome to change it and/or distribute copies of it under certain conditions.Type "show copying" to see the conditions.There is absolutely no warranty for GDB. Type "show warranty" for details.This GDB was configured as "i386-redhat-linux"...(gdb)ϔ㸠(gdb) 䖯 gdb䇗䆩Ёⱘ ⼎ヺˈℸ ҹ ⼎ヺϟ䕧 ӏԩ 䬂 ⱘ ҸDŽ⦄ 㽕䖯㸠 ⚍䇗䆩ⱘ䆱ˈ 䳔㽕 ⼎ϔϟ㽕䇗䆩ⱘ⑤ⷕˈҹ ⶹ䘧 Ͼ 䖯㸠 ⚍䆒㕂DŽ gdbϟˈLinux ⫼ 㓪䕥 Ҹviϡ㛑Փ⫼ˈ ҹՓ⫼list Ҹ 㸠 ӊⱘ⑤ҷⷕⱘϔ䚼 ˈЎњ ⑤ҷⷕⱘ 䚼ˈ 㽕 䬂 ⃵list Ҹ DŽ ԧ ԰ ϟ˖(gdb) list1 #include <stdio.h>2 static void display(int i, int *ptr);34 int main(void) {5 int x = 5;6 int *xptr = &x;7 printf("In main():\n");8 printf(" x is %d and is stored at %p.\n", x, &x);9 printf(" xptr holds %p and points to %d.\n", xptr, *xptr);10 display(x, xptr);(gdb) list11 return 0;12 }1314 void display(int z, int *zptr) {15 printf("In display():\n");16 printf(" z is %d and is stored at %p.\n", z, &z);17 printf(" zptr holds %p and points to %d.\n", zptr, *zptr);18 }(gdb) listLine number 19 out of range; example1.c has 18 lines.(gdb)Ϟ⏙Ἦ ⼎ њ↣ϔϾ䇁 ⱘ ԧ㸠 ˈ↨ ⦄ Ӏ ㄀Ѩ㸠䆒㕂 ⚍ˈ ҹ gdb ⼎ヺϟ䕧 Ҹ˖break 5ˈ ҹⳟ ϟ䴶ⱘ ⼎ ˖(gdb) break 5Breakpoint 1 at 0x8048466: file example1.c, line 5.⚍ 㒣䆒㕂 ˈ⦄ 䅽⿟ 䖤㸠䍋 ˈ䬂 Ҹrunˈг ҹ䬂 㓽 rˈ Ϟ ⦄ⱘ ϟ˖(gdb) rStarting program: /home/nie/example1Breakpoint 1, main () at example1.c:55 int x = 5;Ϟ䗄 㸼 ˈgdb 㒣 㸠 㸠⿟ ˈⳂ ⿟ 䖤㸠 example1.c⿟ Ёmain() ⱘ㄀Ѩ㸠 ℶˈ Ϩ ⼎ 㽕 㸠ⱘ㄀Ѩ㸠䇁 DŽ⦄ Ӏ䖯㸠 ℹ䇗䆩ⱘ ԰ˈ䕧 Ҹ˖nextˈ 㸼 ℹ 㸠⿟ ⱘ↣ϔ 䇁 ˈ ⫼next Ҹ 㸠 display ˈ ⦄ ϟ ⼎ ˖(gdb) next6 int *xptr = &x;(gdb) next7 printf("In main():\n");(gdb) nextIn main():8 printf(" x is %d and is stored at %p.\n", x, &x);(gdb) nextx is 5 and is stored at 0xbffffb44.9 printf(" xptr holds %p and points to %d.\n", xptr, *xptr);(gdb) nextxptr holds 0xbffffb44 and points to 5.10 display(x, xptr);Ўњ䖯 display 䚼䖯㸠䇗䆩ˈ䕧 Ҹstepˈ ˖(gdb) stepdisplay (z=5, zptr=0xbffffb44) at example1.c:1515 printf("In display():\n");step ҸՓ 㸠䖯 䚼ˈℸ 䆹 䚼ˈ ҹ㒻㓁Փ⫼step Ҹ 㗙 next Ҹ䖯㸠 ℹ 㸠ˈ ϡ ℹ 㸠ˈ㗠 Ⳉ ⿟ ϔ⃵ 㸠 ↩ˈ ҹ䕧 Ҹcontinue DŽ㽕䗔 gdbˈ䇋䬂 Ҹquitˈ ⿟ ℸ ҡ 䖯㸠ˈgdbӮ䅽Դ⹂䅸 ⳳⱘ㽕䗔 ˈ Ӯ ⦄㉏Ԑϟ䴶ⱘ ⼎ ˖(gdb) quitThe program is running. Exit anyway? (y or n)ϟ'y' 䗔 䇗䆩⿟ ˈ ⿟ 䑿 㒣䖤㸠 ↩ˈ quit Ҹ䬂 ˈӮⳈ 䗔 gdb,㗠ϡ ⦄ӏԩ ⼎ DŽ✊䰸њՓ⫼gdb䖯㸠⿟ 䇗䆩 ˈ ⿟ ↨䕗ㅔⷁˈ䘏䕥 ↨䕗ㅔ ˈℸ ҹϡ⫼gdbˈ䞛⫼printf䇁 ⿟ Ё䕧 Ё䯈 䞣ⱘ 䇗䆩⿟ ˈг ϔϾϡ䫭ⱘ䇗䆩 ⊩DŽℸЎℶˈ Ӏ 㒣ҟ㒡њuClinux ԰㋏㒳ˈGNU ⱘՓ⫼ˈ њ䖭ѯ乘 ⶹ䆚 ˈ Ӏ 䖯 ゴⱘ䞡⚍ њDŽ7.3 ゟuClinux ⦃Ўњ ⦄ ѢuClinuxⱘ ⫼㋏㒳ⱘ ˈ ゟ ϔϾ ⱘuClinux ⦃ 㽕ⱘDŽѢuClinux ԰㋏㒳ⱘ ⫼ ⦃ ϔ㠀 ⬅Ⳃ ㋏㒳⹀ӊ ЏPC DŽⳂ ⹀ӊ ( кЁ ѢS3C4510Bⱘ )⫼Ѣ䖤㸠 ԰㋏㒳 ㋏㒳 ⫼䕃ӊˈ㗠Ⳃ ⫼ ⱘ ԰㋏㒳ⱘ Ḍ㓪䆥ǃ ⫼⿟ ⱘ 䇗䆩 䳔㽕䗮䖛 ЏPC DŽ П䯈ϔ㠀䗮䖛І ˈ ҹ 㔥 ゟ䖲 ㋏DŽ7.3.1 ゟѸ 㓪䆥䗮 ⱘ ㋏㒳ⱘ 䛑 ҹ㺙 LinuxⱘPC ԰Ў Џ 㓪䆥 Ḍ ⫼ ⫼⿟ ⱘˈԚ Ѣ 䭓 ԰ Windows ԰㋏㒳ϟⱘ⫼ 䇈ˈさ✊ Linux⦃ ϟ ⿟ Ӯ 䇌 ϡ ˈ ℸ к Ѣϡ ⱘ䇏㗙 կњ Џ 㺙 ϡ ԰㋏㒳 ˈⳌ ⱘѸ 㓪䆥⦃ ゟⱘ ⊩DŽ7.3.1.1ˊЎ 㺙Linuxⱘ Џ ゟѸ 㓪䆥佪 ˈ㽕 Џ Ϟ 㺙 Linux ԰㋏㒳ˈ RedHat Linux( кՓ⫼ⱘ Redhat 7.2)ˈϔ 㽕⹂ 䅵ㅫ ⱘ㔥 偅 ǃ㔥㒰䗮䆃䜡㕂ℷ ˈ ԩ PC Ϟ 㺙Linux ԰㋏㒳ⱘ䯂乬ˈ䇋 㗗 䌘 DŽ⬅ѢuClinux ⱘⳌ 䲚 䛑 㞾㞾⬅䕃ӊ㒘㒛ⱘ ⑤ҷⷕˈ ҹ 䕃ӊ ⦃ ゟⱘ ˈ 䕃ӊ䛑 ҹҢ㔥㒰ϞⳈ ϟ䕑㦋 ˈ ϟ ҹ ゟѸ ⦃ DŽ⦄ ҟ㒡ϔϟѸ 㓪䆥ⱘὖ DŽㅔ 䆆ˈѸ 㓪䆥 ϔϾ Ϟ⫳ ҹ ϔϾ Ϟ 㸠ⱘҷⷕDŽ⊼ 䖭䞠ⱘ ˈ 䰙Ϟ ϸϾὖ ˖ԧ㋏㒧 (Architecture)ǃ ԰㋏㒳(Operating System)DŽ ϔϾԧ㋏㒧 ҹ䖤㸠ϡ ⱘ ԰㋏㒳˗ ḋˈ ϔϾ ԰㋏㒳г ҹ ϡ ⱘԧ㋏㒧 Ϟ䖤㸠DŽВ՟ 䇈ˈ Ӏ 䇈ⱘx86 Linux 䰙Ϟ Intel x86ԧ㋏㒧 Linux for x86 ԰㋏㒳ⱘ㒳⿄˗㗠x86 WinNT 䰙Ϟ Intel x86ԧ㋏㒧 Windows NT for x86 ԰㋏㒳ⱘㅔ⿄DŽ к ⍝ ⱘⳂ ⹀ӊS3C4510B㗠㿔ˈП ҹՓ⫼Ѹ 㓪䆥 Ў 䆹⹀ӊϞ ⊩ 㺙 Ӏ 䳔ⱘ㓪䆥 ˈ Ѣ Џ ˈ Џ Ϟ 䖤㸠 Ⳃ Ϟⱘ ⫼⿟ 䖯㸠㓪䆥ˈ⫳ Ⳃ Ϟ䖤㸠ⱘҷⷕḐ DŽ䇏㗙 ҹҢ.tw/->download ϟ䕑 䫒˖arm-elf-binutils-2.11-5.i386.rpmˈarm-elf-gcc-2.95.3-2.i386.rpmˈgenromfs-0.5.1-1.i386.rpmⱘ ӊ Џ ϞⱘӏϔⳂ ϟDŽ䬂 ϟ䴶ⱘ Ҹ 㺙rpm ˖$su#rpm –ivh *.rpmRPM(Red Hat Package Manger)䕃ӊ ㅵ⧚⿟ ˈ ⱘ䕃ӊ 㺙⿟ ˈ䕏 ⫼ ϔ ԰ DŽRPMⳂ ⱘ 3⾡㉏ ˖x86(i386)ˈSparcҹ Alphaˈ ҹ ⱘҢ ӊ Փ⫼ⱘ DŽ Ⳃ ϟ䕑 ӊ↨ arm-elf-binutils-2.11-5.i386.rpmˈarm-elf-binutils㸼⼎ ӊ ˈ2.11㸼⼎⠜ 㓪 ˈ5㸼⼎ 㸠 ˈг Ⳃ 㒣 㸠ⱘ⃵ ˈi386 ℸ䕃ӊ Ў䗖⫼ѢIntel x86ⱘѠ䖯 (binary)⿟ ˈг 㒣㓪䆥 Ϩ ҹⳈ 㺙ⱘ䕃ӊ ˈ ⱘĀrpmā㸼⼎䖭 Red HatⱘRPM⿟ DŽ↣ϔ⠜ⱘRPM ˈ㢹 ⦄䕃ӊ 䯂乬ˈ䛑Ӯ䞡 䖯㸠patch buildˈ䖭ḋ 㸠 ⱘ䚼 Ӯ 1ˈҹ㸼⼎䆹⠜ ϞϾ⠜ ⱘ DŽ䖭䞠 ⫼ⱘ Ҹrpm –ivhЁˈ-i㸼⼎Installationˈ 㺙 ⱘRPM䕃ӊ ˗-h㸼⼎Hashˈ䆹 㺙 䯈 ⦄”#”ヺ ˈ ⼎Ⳃ ⱘ 㺙䖛⿟ˈ䖭Ͼヺ ϔⳈ 㓁 㺙 ℶ˗-v㸼⼎Verboseˈ ⼎ 㺙 ⱘ䆺㒚 DŽ㟇ℸ Ӏ Ѹ 㓪䆥 㒣 㺙 њ Џ DŽҹ Ӏ ҹ⫼Ѹ 㓪䆥 arm-elf-gcc 㓪䆥 ԰㋏㒳 Ḍ ⫼ ⫼⿟ њDŽ䇏㗙г ҹҢ㔥キ/pub/uClinux/arm-elf-tools/Ϟϟ䕑 ⱘarme-elf-gcc ˈ 㛮 ӊarm-elf-tools-20030314.shˈ Џ Ϟ 㺙䆹 䫒ˈ 䆹 ӊ Ⳃ ϟˈ䬂 ˖$su#ls –l arm-elf-tools-20030314.sh䆹 Ҹ ⼎ ӊⱘ ⾡ ˈ 䆹㛮 ӊ ⱘϡ 㸠ⱘˈ 䖬䳔㽕䕧 Ҹ˖#chmod 755 arm-elf-tools-20030314.shҹ Ў 㸠 ˈ✊ 䗮䖛䬂 Ҹ:#sh ./arm-elf-tools-20030314.shҹ 㸠䆹 ӊDŽ 㸠 /usr/local/bin/䏃 ϟ gcc, g++, binutils, genromfs, flthdr elf2flt ㄝ ⾡ ⫼ DŽ7.3.1.2Ў 㺙windowsⱘ Џ ゟѸ 㓪䆥䖭䚼 ϧ䮼䩜 䙷ѯ Linux⦃ LinuxЁⱘ ⫼⿟ ϡ❳ ˈ ⫼PCϞ ѢWindowsⱘ ԰㋏㒳 ㋏㒳ⱘ䇏㗙㗠 ⱘDŽ1. Cygwin䕃ӊҟ㒡Ўњ Windowsϟ ԰㋏㒳 ⫼⿟ ˈ ҹ Windows⦃ ϟ㺙ϞCygwin 䕃ӊDŽCygwin ϔϾ Windows Ϟ䖤㸠ⱘUnix῵ ⦃ ˈ Cygnus Solutions ⱘ㞾⬅䕃ӊDŽ Ѣ д Unix/Linux ԰⦃ ˈ 㗙䖯㸠 ѯ⡍⅞ⱘ ԰ˈ Փ⫼GNU 䲚 WindowsϞ䖯㸠 ㋏㒳 ˈ䴲 ⫼DŽCygnus 佪 gccˈgdbㄝ 䖯㸠њ 䖯ˈՓ Ӏ㛑 ⫳ 㾷䞞win32ⱘⳂ ӊDŽ✊ ˈ 䖭ѯ ⿏ỡ windows Ϟ DŽϔ⾡ Ḝ Ѣwin32 API 䖭ѯ ⱘ⑤ҷⷕ䖯㸠 ˈ䖭ḋ ✊䳔㽕 䞣 ԰DŽ ℸˈCygnus䞛 њϔ⾡ϡ ⱘ ⊩üüҪӀ њϔϾ ѿ ( cygwin1.dll)ˈ win32 APIЁ≵ ⱘUnix亢Ḑⱘ䇗⫼( fork,spawn,signals,select,socketsㄝ) 㺙 䞠䴶ˈг 䇈ˈҪӀ Ѣwin32 A PI њϔϾUnix㋏㒳 ⱘ῵ DŽ䖭ḋˈ 㽕 䖭ѯ ⱘ⑤ҷⷕ 䖭Ͼ ѿ 䖲 ϔ䍋ˈ ҹՓ⫼UnixЏ ϞⱘѸ 㓪䆥 ⫳ ҹ Windows Ϟ䖤㸠ⱘ 䲚DŽҹ䖭ѯ⿏ỡ Windows Ϟⱘ Ў ⸔ˈCygnus 䗤ℹ Ҫⱘ ( Тϡ䳔㽕 ⑤ҷⷕ䖯㸠 ˈ 䳔㽕 ҪӀⱘ䜡㕂㛮 )䕃ӊ⿏ỡ WindowsϞ DŽ䖭ḋˈ Windows Ϟ䖤㸠bash ǃ⫼ ˈ 㾝 UnixϞ ԰DŽ ѢCygwin ⦄ⱘ 䆺㒚 䗄ˈ䇋 㗗/cygwin-ug-net/cygwin-ug-net.htmlDŽ2. Cygwin䕃ӊⱘ 㺙㽕 Cygwinⱘ 㺙⠜ ˈ䇋 CygwinⱘЏ义/Ϟϟ䕑 ⱘCygwinˈ 䆹义䴶ⱘ Ϟ㾦 '' Install Cygwin Now ''ˈ⚍ ℸ ˈ Ӯ ϟ䕑ϔϾ setup.exeⱘGUI 㺙⿟ ˈ⫼ 㛑ϟ䕑ϔϾ ⱘCygwinDŽ 7.2 ⼎Ў ⚍ setup.exe ⦄”䗝 㺙㉏ ” 䆱ḚDŽ 䆂䇏㗙 Cygwin Ͼ 㺙 ϟ䕑 ˈ 䖯㸠 㺙↨䕗 ˈ ϟ 䗝 ㄀ѠϾ䗝乍ˈㄝ Cygwin ϟ䕑 ˈ 䗝 ㄀ϝϾ䗝乍䖯㸠 㺙DŽ7.2䗝 㺙㉏㺙ⱘ 䆂 ϡ㽕 㺙 C:\Ⳃ ϟˈ↨ 㺙 D:\ϟDŽ㺙ⱘ䖛⿟ЁˈӮ䅽⫼ 䗝 㺙 ѯ ˈ䖭ѯ Џ㽕 ⹂ ⦃ ˈ㓪䆥 ㄝˈ ϡ㛑⹂ ԧ䳔㽕 ѯ ⱘ䆱ˈ㗠⹀Ⲭぎ䯈䎇 ⱘ ϟˈ 䗝 䚼 㺙DŽ ⦄ⱘ 䆱Ḛⱘ''All''ⱘ 䖍⚍ ''Default''ˈⳈ ''Install''ˈ ϟ 7.3 ⼎˖7.3䗝 㺙Cygwinⱘ 㺙䖛⿟ 䯈↨䕗䭓ˈ䇋䇏㗙㗤 ㄝ DŽ ⦄ ⱘ⬏䴶⚍ Ā ā 䪂П ˈ Ӯ ⾦䩳ⱘ䮾 ˈ ⦄㉏Ԑϟ䴶ⱘ⬏䴶 7.4 ⼎ˈ䖭 㸠Cygwin 㺙 ⱘ㛮 䜡㕂DŽ7.4Cygwin 㺙 㞾 䜡㕂㞾 䜡㕂㒧 ˈ ⦄Cygwin 㺙㒧 ⱘ ⼎ḚDŽḠ䴶ϞӮ ⦄Cygwinⱘ DŽ3. Cygwinϟ⫳ Ѹ 㓪䆥㞾 ⫳ Ѹ 㓪䆥 П ˈ佪 cygwin䖯㸠ϔѯ䆒㕂DŽ 䆒Cygwin 㺙 dⳂ ϟˈ Cygwinに П ˈ䖯 D:\cygwinⳂ ˈ 䖭ϾⳂ ϟˈ ϔϾ ӊ Ўcygwin.batⱘ ⧚ ӊˈ㓪䕥䆹 ӊˈ ㄀ϔ㸠 set CYGWIN=title nteaˈ䖭 Ўcygwinⱘ ⧚ ӊ䳔㽕 Unix ӊ㋏㒳῵ DŽ ↩ ˈ 䗔 DŽ Ḡ䴶ϞⱘCygwin ˈ 咬䅸⫼ Ў WindowsЁⱏ ⱘ⫼ (䖭䞠 Փ⫼ⱘ ԰㋏㒳 windows 2000professsional)ˈ 7.5 ⼎ⱘ⬠䴶Ёˈ ḍⳂ ( D:\cygwin)ϟ䬂 ˖cd binmv sh.exe sh-original.exeln –s bash.exe sh.exeϞ䗄 ℹⱘ Ў linux㋏㒳 shヺ 䫒 bashˈCygwinϞⱘsh.exe bash.exe ϡ ⱘˈ ℸ 乏⫼bashҷ shDŽҢ㔥キ/pub/uClinux/arm-elf-tools/tools-20030314/Ϟϟ䕑⫳ 䫒ⱘ ⾡⑤ⷕˈḍ 㛮 ӊbuild-uclinux-tools.sh ゟ windowsϟ㓪䆥⫼ ⫼⿟ ⱘѸ 㓪䆥 ˈ⫳ ⱘѸ 㓪䆥 㒜㹿 Ўarm-elf-tools-cygwin-yyyymmdd.tar.gzⱘ ӊˈ ЁyyyyЎ⫳ Ѹ 㓪䆥 ⱘ ˈmmЎ⫳ Ѹ 㓪䆥 ⱘ ӑˈddЎ DŽ䖭䞠ˈ 䇏㗙⊼ ⱘ ⫳ Ѹ 㓪䆥 ⱘ䖛⿟Ёˈ 㛑Ӯ䘛 ⃵䫭䇃ˈ䇏㗙 䆹ḍ 㒭 ⱘ 䫭 ˈ䖯㸠Ⳍ ӊⱘ DŽ⬅Ѣд Ϟⱘ ˈlinuxϟⱘ 㓽 ӊϔ㠀䛑 ҹ.tar.gz 㗙.tgz㒧 ⱘˈ㱑✊⫼windowsϟⱘ㾷 䕃ӊ↨ winzip 㗙winrar ҹ㾷 䖭ѯ ӊˈԚ 㤤䇏㗙ϡ㽕⫼䖭ѯ䕃ӊ windowsϟ㾷 ˈ Ў䖭ḋ 㛑Ӯ䗴 ѯ ⱘ϶ DŽк⫳ ⱘѸ 㓪䆥 Ўarm-elf-tools-cygwin-20030502.tar.gzDŽ7.5Cygwin ⦃4. Cygwin⦃ ϟ ゟѸ 㓪䆥ḍⳂ ϟ䬂 ˖tar xvzf arm-elf-tools-cygwin-20030502.tar.gz䖯㸠Ѹ 㓪䆥 ⱘ㾷 ˈ㾷 ↩ /usr/local/bin/Ⳃ ϟ ҹⳟ ⾡GNU DŽ њѸ 㓪䆥 ˈ❳ Windowsⱘ䇏㗙 ҹ Windowsϟ㓪䆥 uClinuxϞ䖤㸠ⱘ ⫼⿟ њDŽ7.3.2 uClinux䩜 ⹀ӊⱘⳂ ˈuClinux 㹿 ⿏ỡ S3C4510B Ҫ ℒARM㢃⠛ϞˈԚ⬅Ѣ ԰㋏㒳ⱘ䖤㸠 Ϣ ㋏㒳ⱘ⹀ӊ Ⳍ ⱘˈ㗠⹀ӊⱘ䆒䅵 Ӯ ЎՓ⫼ ⱘϡ 㗠 ϛ ˈ ℸˈ uClinux Ḍ⑤ҷⷕЁ ⹀ӊ㋻ Ⳍ ⱘ䚼 䆹䩜 ⡍ ⱘ⹀ӊ԰ 䗖 ⱘ ˈ⬅ѢuClinux Ḍ⑤ҷⷕ ϔ䚼 ⱘ⹀ӊ偅 ⿟ ˈϡ 㛑ϔϔ Вˈ ℸˈ ѢS3C4510Bⱘ ㋏㒳ⱘ䆒䅵Ϣ䖤㸠Ⳍ ⱘ䚼 ԰ㅔ ⱘҟ㒡ˈ 䇏㗙 DŽuClinux Ḍ⑤ҷⷕЁ S3C4510B⠛ ⡍⅞ 㛑 ҹ ҪⳌ ⹀ӊ ⱘ НԡѢuClinux-Samsung\Linux-2.4.x\include\asm-armnommu\arch-samsung\hardware.h ӊЁˈ Ё Ͼ ⊼ ˖/** define S3C4510b CPU master clock*/#define MHz 1000000#define fMCLK_MHz (50 * MHz)#define fMCLK (fMCLK_MHz / MHz)#define MCLK2 (fMCLK_MHz / 2)ҹϞ Нњ㋏㒳 ԰ⱘЏ 䩳乥⥛Ў50MHzˈ㢹⫼ ㋏㒳ⱘ ԰乥⥛ϡ ˈ ℸ ˈ㢹І㸠 䞛⫼ 䚼 䩳 ⫼Ѣ⊶⡍⥛⫳ ˈ䆹乥⥛ 䖬ϢІ㸠䗮 ⊶⡍⥛ DŽ/**********************************//* System Memory Control Register *//**********************************/#define DSR0 (2<<0) /* ROM Bank0 */#define DSR1 (0<<2) /* 0: Disable, 1: Byte, 2: Half-Word, 3: Word */ #define DSR2 (0<<4)#define DSR3 (0<<6)#define DSR4 (0<<8)#define DSR5 (0<<10)#define DSD0 (2<<12) /* RAM Bank0 */#define DSD1 (0<<14)#define DSD2 (0<<16)#define DSD3 (0<<18)#define DSX0 (0<<20) /* EXTIO0 */#define DSX1 (0<<22)#define DSX2 (0<<24)#define DSX3 (0<<26)#define rEXTDBWTH (DSR0|DSR1|DSR2|DSR3|DSR4|DSR5 | DSD0|DSD1|DSD2|DSD3 | DSX0|DSX1|DSX2|DSX3)ҹϞ Нњ㋏㒳 ˈ ✻ҹϞ НˈROM/SRAM/FLASH Bank0 НЎ16ԡ ˄џ ϞˈROM/SRAM/FLASH Bank0ⱘ ⬅B0SIZE[1:0]ⱘ⢊ ˅ˈ㗠ROM/SRAM/FLASH Bank1̚ROM/SRAM/FLASH Bank5⽕⫼˗DRAM/SDRAM Bank0 НЎ16ԡ ˈDRAM/SDRAM Bank1̚DRAM/SDRAM Bank3⽕⫼˗ 䚼I/O㒘 䚼⽕⫼˗㢹⫼ ㋏㒳ⱘ ㋏㒳䜡㕂ϡ ˈ ℸ DŽП 䖬 њ Ҫϔѯ ˈ ROM/SRAM/FLASH Bank0 ⱘ䆒㕂ˈFlash 䞣ⱘ䆒㕂ˈDRAM/SDRAM Bank0 ⱘ䆒㕂ˈSDRAM 䞣ⱘ䆒㕂ㄝˈ䖭ѯ䆒㕂 䆹Ϣ⫼ ㋏㒳 DŽ7.3.3㓪䆥uClinux Ḍ԰Ў ԰㋏㒳ⱘḌ ˈuClinux Ḍ䋳䋷ㅵ⧚㋏㒳ⱘ䖯⿟ǃ ǃ䆒 偅 ⿟ ǃ ӊ㋏㒳 㔥㒰㋏㒳ˈ ⴔ㋏㒳ⱘ ⾡ 㛑DŽuClinux Ḍⱘ⑤ҷⷕ ⱘˈӏԩҎ 㽕䙉 GPLˈ ҹ Ḍ ҹ 㒭ҪҎՓ⫼ˈ ℸˈ 㓪⿟Ҏ ⱘ ϟˈuClinuxⱘ Ḍ⠜ ϡ ˈ ⱘ Ḍ њ ⱘ Ḍⱘ㔎䱋ˈ њ䆌 ⱘ⡍ ˈ⫼ 㞾 ⱘ㋏㒳ЁՓ⫼䖭ѯ ⱘ⡍ ˈ ḍ 㞾 ⱘ㋏㒳䞣䑿 催 ǃ 〇 䴴ⱘ Ḍˈ 䳔㽕䞡 㓪䆥 ḌDŽϔ㠀䇈 ˈ ⱘ Ḍ⠜ Ӯ ⱘ⹀ӊˈ ⱘ䖯⿟ㅵ⧚㛑 ˈ䖤㸠䗳 Ӯ ǃ 〇 ˈ Ϩϔ㠀䛑Ӯ ⠜ Ё ⦄ⱘ㔎䱋ㄝˈ ℸˈ㒣 䗝 㑻 ⱘ㋏㒳 Ḍ 㽕ⱘDŽuClinux Ḍ䞛⫼῵ ⱘ㒘㒛㒧 ˈ䗮䖛 Ḍ῵ ⱘ ㋏㒳ⱘ 㛑ˈ ℸˈℷ⹂ ⧚ⱘ䆒㕂 Ḍⱘ 㛑῵ ˈҢ㗠 㓪䆥㋏㒳 䳔 㛑ⱘҷⷕˈӮ ㋏㒳ⱘ䖤㸠䖯㸠 ϟ Ͼ 䴶ⱘӬ ˖ü⫼ ḍ 㞾䑿⹀ӊ㋏㒳ⱘ 䰙 㓪䆥ⱘ Ḍ Ў ⱘҷⷕˈϔ㠀Ӯ㦋 催ⱘ䖤㸠䗳 DŽü⬅Ѣ Ḍҷⷕ ㋏㒳䖤㸠 Ӯ 偏 ˈ ℸˈ ⷁ ⱘ ḌӮ㦋 ⱘ⫼ ぎ䯈DŽü ḌЁϡ 㽕ⱘ 㛑῵ ˈ ҹ ㋏㒳ⱘⓣ⋲ˈҢ㗠 ㋏㒳ⱘ〇 DŽuClinuxⱘ Ḍ⑤ҷⷕ ҹҢ䆌 㔥キϞ 䌍ϟ䕑ˈ Ḍⱘ ϔ㠀 ϸ⾡ ˈϔ⾡ ⱘ Ḍ⠜ ˈ ⱘ Ḍ⠜ ϔ㠀 .tar.gz ӊˈՓ⫼ 䳔㽕㾷 DŽ ϔ⾡ 䗮䖛ⱘ⠜ 㸹ϕ˄patch˅ˈ䖒 㑻ⱘ DŽ՟ 䞛⫼ⱘ LinuxϟՓ⫼ⱘѸ 㓪䆥 uClinux-Samsung-20020318.tar.gz⑤ⷕ 㞾㔥キ.twDŽuClinuxⱘ Ḍ⑤ҷⷕ ˈ ⫼Ѹ 㓪䆥 ҹ㓪䆥⫳ 䖤㸠 ⹀ӊⳂ ϞⱘuClinux ḌDŽҢ.twϞϟ䕑uClinux Ḍ⑤ҷⷕuClinux-Samsung-20020318.tar.gzˈ Џ ⱘ⫼ Ⳃ DŽ䖤㸠㾷 Ҹ˖tar xzvf uClinux-Samsung-250020318.tar.gz㾷 ↩ ˈ Ӯ ⫼ Ⳃ ϟ⫳ uClinux-SamsungⳂ ˈҹϟ Ҹ䖯 䆹Ⳃ Ё˖$cd uClinux-Samsung1.䬂 Ҹ˖make menuconfigḌ䜡㕂DŽ䆹 Ҹ 㸠 ↩ ⫳ ӊ.configˈ 䖭Ͼ䜡㕂 DŽϟϔ⃵ make menuconfigⱘ ѻ⫳ ⱘ.config ӊˈ ⱘ.config㹿 Ў.config.oldDŽℸ Ӯ ⦄㦰 䜡㕂 䆱Ḛˈ㽕∖䖯㸠Ⳃ ⱘ䗝 ˈ 7.6 ⼎ˈ䕧 䔺 ˈ ⦄կ䗝 ⱘ ԧⱘկ ѻ 㸼ˈ 䖭䞠 Ӏ䗝 ˖Samsung/4510Bˈ 7.7 ⼎ˈ ⱘ䗝 Ϟˈ Ӏ䗝 uC-libcˈ Ҫ䗝乍 ϡ⫼ ˈ 䆒㕂 ˈ Ⲭ䗔 DŽ7.6Ⳃ 䜡㕂7.7䗝 䗖ⱘѻ ㉏2ˊ䬂 Ҹ˖make dep䆹 Ҹ⫼Ѣ ձ ㋏DŽ3.䬂 Ҹ˖make clean䆹 Ҹ⏙䰸ҹ 䗴 Ḍ ⫳ ⱘ Ⳃ ӊˈ῵ ӊ ϔѯЈ ӊDŽ4ˊ䬂 Ҹ˖make lib_only䆹 Ҹ㓪䆥 ӊDŽ5ˊ䬂 Ҹ˖make user_only䆹 Ҹ㓪䆥⫼ ⫼⿟ ӊDŽ6ˊ䬂 Ҹ˖make romfs䆹 Ҹ⫳ romfs ӊ㋏㒳DŽ7ˊ䬂 Ҹ˖make image⊼ 䖭ϔℹⱘ 㛑Ӯ ⦄䫭䇃ⱘ ⼎ˈ㉏ԐѢ˖arm-elf-objcopy: /home/nie/uClinux-Samsung/linux-2.4.x/linux: No such file or directorymake[1]: *** [image] Error 1make[1]: Leaving directory `/home/nie/uClinux-Samsung/vendors/Samsung/4510B'make: *** [image] Error 2䖭 Ў㄀ϔ⃵㓪䆥 䖬≵ romfs.oˈ ҹ 䫭ˈㄝromfs.o㓪䆥 њҹ ˈ 䖯㸠 Ḍⱘ㓪䆥ˈ ϡӮ ⦄䖭Ͼ䫭䇃 њDŽ ϡ Ḍⱘ㓪䆥ˈ ҹ ϡ ⧚Ӯ䖭Ͼ䫭䇃 DŽ㒻㓁䖯㸠㓪䆥 ԰DŽ8ˊ䬂 Ҹ˖make䗮䖛 ϾⳂ ⱘMakefile ӊ䖯㸠ˈӮ Ⳃ ϟ⫳ ϔ Ⳃ ӊDŽϞ䗄ℹ偸 ˈ њ uClinux⑤ⷕⱘ㓪䆥 ԰DŽ Ͼ㓪䆥䖛⿟㾚䅵ㅫ 䖤㸠䗳 㗠 ˈ 㑺䳔㽕 䩳 DŽ㓪䆥 Ḍⱘ ˈ 䆂 Linux ϟ䖯㸠DŽ7.3.4 Ḍⱘ 䕑䖤㸠Ḍⱘ㓪䆥 ԰ П ˈӮ / uClinux-Samsung/imagesⳂ ϟⳟ ϸϾ Ḍ ӊ˖image.ram image.romˈ Ёˈ image.rom⚻ ROM/SRA M/FLA SH Bank0 ⱘFlash Ёˈ ㋏㒳 ԡ Ϟ⬉ ˈ Ḍ㞾㾷 SDRAMˈ 䖤㸠DŽimage.ram Ⳉ ㋏㒳ⱘSDRAMЁ䖤㸠ˈՓ⫼ADS˄ SDT˅䲚 ⦃ ㋏㒳ⱘSDRAM 䍋 Ў0x0 ˈ image.ram䕑 Ң0x8000 ⱘSDRAMЁˈ 䕑 ↩ ˈ PC 䩜 ⱘ Ў0x8000 㸠DŽ⊼ 䆹 Ḍ咬䅸І㸠 COM1Ў䕧 䕧 ˈ⊶⡍⥛Ў19200ˈ8Ͼ ԡˈ1Ͼ ℶԡˈ 偠DŽ7.4 uClinuxϟ ⫼⿟њϞ䗄 ԰ ˈϔϾ ⫼ 㒣 њˈ 䖭Ͼ ПϞˈ ҹḍ ϡ 䳔㽕 ⫼њDŽ 7.8 ⼎ЎϔϾ ѢuClinuxⱘ ㋏㒳 Ḛ 㒧 ˈϟ䴶 䇏㗙ҟ㒡 ԩ 㞾 ⱘ ⫼⿟ ⏏ Ⳃ Ϟ䖤㸠DŽ7.8 ѢuClinux ㋏㒳ḚѢuClinux㋏㒳ⱘ ⫼⿟ ⱘ 䗮 Linux Ϟ( к 㒣ҟ㒡њ䗖⫼ѢWindows⦃ ⱘѸ 㓪䆥 ˈ ҹг ҹ Windows )⫼Ѹ 㓪䆥 DŽ⬅ѢuClinux Ў≵ ㅵ⧚ (MMU)ⱘ ⧚ 㗠䆒䅵ⱘˈ њ䕗 ⱘ㊒ㅔˈ ҹ 㛑 ⦄䖭ḋⱘ ˖ Linuxϟ ҹՓ⫼ⱘ ѯ uClinuxϟ ⫼ϡњˈ䖭Ͼ ˈ 䳔㽕⫼ 㓪 Ⳍ ⱘ њDŽ ✊㒱 ⱘ Ӏ䛑䖬 䗮⫼ⱘDŽ䰸ℸҹ ˈ x86⠜ ⱘgcc㓪䆥 ϟ㓪䆥䗮䖛ⱘ䕃ӊˈ䗮 ϡ䳔㽕 ⱘ ҹ⫼ Ӏ ゟⱘѸ 㓪䆥 㓪䆥 ҹ uClinuxϞ䖤㸠ⱘ ӊḐ DŽ ℸ uClinuxϟ䖤㸠ⱘ⿟ ˈ Ϟ Linuxϟ䖤㸠ⱘ⿟ ϔḋⱘˈ ѢLinuxϟⱘ㓪⿟ˈ䇏㗙 ҹ 㗗 Ҫ 䆺㒚ⱘ䌘 ˈҹϟ ϔϾㅔ ⱘ՟ ˈ 䗄 䖛⿟DŽ㗗㰥ϔϾ Ё ⱘ՟ ˈ ӊ Ўlednxy.cˈ ⑤ҷⷕ ϟ˖/******************************************************** Institute of Automation, Chinese Academy of Sciences* File Name˖lednxy.c* Description˖ timing interrupt* Author˖Xueyuan Nie* Date˖*******************************************************/#include <signal.h>#include <unistd.h>#define IOPMOD (*(volatile unsigned*)0x3ff5000)#define IOPDATA (*(volatile unsigned *)0x3ff5008)。

相关主题