สารบัญ:
- ขั้นตอนที่ 1: ดาวน์โหลด Sunxi-tools
- ขั้นตอนที่ 2: เปิดเครื่องรูดซอร์สโค้ด
- ขั้นตอนที่ 3: ดาวน์โหลดรหัส::blocks
- ขั้นตอนที่ 4: ทดสอบ IDE ของคุณ
- ขั้นตอนที่ 5: ทำการทดสอบให้เสร็จ
- ขั้นตอนที่ 6: สร้างโครงการใหม่
- ขั้นตอนที่ 7: เพิ่มไฟล์ใน Project
- ขั้นตอนที่ 8: ให้ Gcc ปฏิบัติตามมาตรฐานภาษา ISO C ปี 1999
- ขั้นตอนที่ 9: ค้นหาการพึ่งพาที่ขาดหายไป
- ขั้นตอนที่ 10: แกะ Mman
- ขั้นตอนที่ 11: และเพิ่มลงในโครงการ
- ขั้นตอนที่ 12: เส้นทางที่ถูกต้อง
- ขั้นตอนที่ 13: การไล่ผี
- ขั้นตอนที่ 14: หมายเหตุ
2025 ผู้เขียน: John Day | [email protected]. แก้ไขล่าสุด: 2025-01-13 06:58
ข้อกำหนดเบื้องต้น:
คุณจะต้องการ
- คอมพิวเตอร์ (เดสก์ท็อป) ที่ใช้ Windows
- การเชื่อมต่ออินเทอร์เน็ต
- บอร์ด Orange PI
สุดท้ายเป็นทางเลือก แต่ฉันแน่ใจว่า คุณมีอยู่แล้ว มิฉะนั้นคุณจะไม่อ่านคำแนะนำนี้
เมื่อคุณซื้อคอมพิวเตอร์บอร์ดเดี่ยว Orange PI จะเหลือเพียงเศษโลหะจนกว่าจะกำหนดค่าอย่างเหมาะสม และไฟล์การกำหนดค่าหลัก: "script.bin" เป็นคีย์แรกที่ทำให้มันมีชีวิต ไฟล์นี้อยู่ในพาร์ติชันสำหรับเริ่มระบบของการ์ด SD ที่สามารถบู๊ตได้ของคุณ และโชคดีสำหรับเรา ในการแจกแจง Linux ส่วนใหญ่จากเว็บไซต์ทางการ (https://www.orangepi.org/downloadresources/) พาร์ติชันนี้คือ FAT32 และคอมพิวเตอร์ Windows ทุกเครื่องสามารถเห็นได้ง่าย มันทำให้สิ่งต่าง ๆ ง่ายขึ้นจริง ๆ เนื่องจากยังไม่มีวิธีที่เชื่อถือได้ในการเขียนลงในพาร์ติชัน Linux ext2 จากภายใต้ Windows
โชคร้ายสำหรับเรา ไฟล์การกำหนดค่า script.bin มีรูปแบบไบนารีที่ไม่เป็นมิตรกับการแก้ไขโดยมนุษย์ เราต้องการเครื่องมือซอฟต์แวร์บางประเภทเพื่อถอดรหัสและเข้ารหัสลับหลังการแก้ไขที่จำเป็น และชุดเครื่องมือดังกล่าวก็มีอยู่จริง มันเป็น SUNXI-TOOLS ที่น่าอับอาย แมลงวันในครีมคือว่ามันมีวัตถุประสงค์เพื่อให้ทำงานภายใต้ Linux และเราต้องเก็บเครื่อง Linux เฉพาะไว้เพื่อใช้เครื่องมือ sunxi เท่านั้นหรือหาวิธีรวบรวมสำหรับ windows
ฉันสามารถคอมไพล์และแชร์ไฟล์ปฏิบัติการได้ แต่ไม่มีใครรู้ว่าพวกเขาต้องการสร้างรีลีสใหม่หรือไม่ และคุณจะต้องคอมไพล์ใหม่โดยเร็วที่สุด ดังนั้นฉันจึงตัดสินใจจัดทำคู่มือวิธีการรวบรวมเครื่องมือที่จำเป็นจากแหล่งที่มา มาเริ่มกันเลย.
ขั้นตอนที่ 1: ดาวน์โหลด Sunxi-tools
รับซอร์สโค้ด sunxi-tools เวอร์ชันล่าสุด (หรือจำเป็น) ไปที่ URL: https://github.com/linux-sunxi/sunxi-tools/releases และเลือกดาวน์โหลดเป็นไฟล์ zip
ขั้นตอนที่ 2: เปิดเครื่องรูดซอร์สโค้ด
เมื่อการดาวน์โหลดเสร็จสิ้น ให้เปิดเครื่องรูดซอร์สโค้ดไปยังโฟลเดอร์ที่คุณเลือก (ต่อไปฉันจะถือว่าโฟลเดอร์นี้คือ c:\sunxitools\ ดังนั้นแทนที่เส้นทางนี้ด้วยเส้นทางของคุณเอง)
ขั้นตอนที่ 3: ดาวน์โหลดรหัส::blocks
หากคุณมีสำเนาคอมไพเลอร์ c ++ ที่ทำงานอยู่สำหรับ windows ที่ติดตั้งไว้ และถ้าคุณรู้วิธีใช้งาน คุณอาจไปยังขั้นตอนที่ 3 ได้โดยตรง คนอื่นๆ ควรได้รับคอมไพเลอร์ c++ และเชลล์ (IDE) ที่เหมาะสมเพื่อใช้งานอย่างสะดวกสบาย ตัวเลือกของฉันคือ code::blocks สำหรับ Windows พร้อมกับชุดเครื่องมือ MinGW ที่ติดตั้งไว้ล่วงหน้า คุณสามารถรับได้จากที่นี่:https://sourceforge.net/…/codeblocks-16.01mingw-setup.exe/download
ดาวน์โหลดและติดตั้ง
ขั้นตอนที่ 4: ทดสอบ IDE ของคุณ
หากต้องการทดสอบว่าทุกอย่างเรียบร้อยดีหรือไม่ ให้เริ่ม codeblocks คลิก "สร้างโครงการใหม่" เลือก "แอปพลิเคชันคอนโซล" เลือก c หรือ c++ พิมพ์ชื่อโครงการชำระเงิน รักษาค่าเริ่มต้นไว้โดยไม่มีการแตะต้องในหน้าต่างถัดไป และคลิก "เสร็จสิ้น" ".
ขั้นตอนที่ 5: ทำการทดสอบให้เสร็จ
จากนั้นคลิกสามเหลี่ยมสีเขียวที่แผงด้านบนของ IDE หรือใช้จุดเมนู Build->Run หากทุกอย่างเรียบร้อยดี คุณควรเห็นข้อความจากแอปพลิเคชัน "สวัสดีชาวโลก" ที่สร้างอัตโนมัติของคุณในหน้าต่าง "DOS" สีดำ
หากไม่เป็นเช่นนั้น แสดงว่า IDE และคอมไพเลอร์ทำงานไม่ถูกต้อง และคุณจะต้องตรวจสอบวิธีตั้งค่าให้ถูกต้อง อาจเป็นไปได้ว่าคุณจะต้องดาวน์โหลดเครื่องมือการเขียนโปรแกรมรุ่นอื่นหรือตรวจสอบการอนุญาตในซอฟต์แวร์ไฟร์วอลล์ / โปรแกรมป้องกันไวรัสของคุณ
ขั้นตอนที่ 6: สร้างโครงการใหม่
ตอนนี้ คุณควรมีชุดเครื่องมือของโปรแกรมเมอร์ C/C++ และซอร์สโค้ดเครื่องมือ sunxi ที่คลายแพ็กแล้วในโฟลเดอร์ c:\sunxitools\ บนคอมพิวเตอร์ของคุณ ถึงเวลารวบรวมโครงการ สร้างโครงการใหม่ใน Your IDE เลือกโปรเจ็กต์ C ธรรมดา (ไม่ใช่ c++) ของประเภท "แอปพลิเคชันคอนโซล"
ตรวจสอบให้แน่ใจว่าคุณกำลังสร้างโครงการในโฟลเดอร์ c:\sunxitools\ และไม่ใช่ในที่อื่น (EG codeblocks มักจะสร้างโฟลเดอร์ย่อยที่มีชื่อเดียวกันกับโปรเจ็กต์ ดังนั้นหากคุณตั้งชื่อโปรเจ็กต์ของคุณแล้ว ให้พูดว่า "test" แล้วลองวางไว้ใน c:\sunxitools\ โปรเจ็กต์ของคุณอาจหายไป ไปที่ c:\sunxitools\test\ หากคุณไม่ใส่ใจเพียงพอ) Sunxi-tools มียูทิลิตี้หลายอย่าง แต่สำหรับจุดประสงค์ของเรา เราจะต้องมีเพียงหนึ่งยูทิลิตี้: ยูทิลิตี้ที่เรียกว่า "fexc"
ขั้นตอนที่ 7: เพิ่มไฟล์ใน Project
ยูทิลิตี้ "fexc" มีหน้าที่ในการแปลง script.bin เป็นรูปแบบข้อความและสำหรับการแปลงกลับเป็นไบนารี จำเป็นอย่างยิ่งที่โปรแกรมปฏิบัติการของยูทิลิตี้นี้จะต้องมีชื่อ "fexc.exe" ดังนั้นจะดีถ้าคุณตั้งชื่อโปรเจ็กต์ของคุณเป็น "fexc" อย่างไรก็ตาม คุณสามารถใช้ชื่ออื่นของโปรเจ็กต์ได้ เนื่องจากคุณสามารถเปลี่ยนชื่อไฟล์เรียกทำงานหลังจากการคอมไพล์ได้เสมอ หรือคุณสามารถเลือก "Project->Properties" จากเมนูแบบเลื่อนลงด้านบน และในหน้าต่างที่ปรากฏ ให้คลิกแท็บ "สร้างเป้าหมาย" และแก้ไขฟิลด์ "ชื่อไฟล์เอาต์พุต" เพื่อแทนที่ชื่อที่เรียกใช้งานได้
ในโครงการสร้างอัตโนมัติของคุณ คุณควรเพิ่มไฟล์ต้นฉบับเพียงห้าไฟล์:
- fexc.c
- script.c
- script_bin.c
- script_fex.c
- script_uboot.c
และไฟล์ส่วนหัวเจ็ดไฟล์:
- list.h (ย้ายจากโฟลเดอร์ c:\sunxitools\include\ ไปยังโฟลเดอร์ c:\sunxitools)
- fexc.h
- script.h
- script_bin.h
- script_fex.h
- script_uboot.h
- version.h
อย่าลืมแยก main.c ที่สร้างอัตโนมัติออกจากโปรเจ็กต์ เพราะ fexc.c มีฟังก์ชัน "int main" อยู่แล้ว (โปรดจำไว้ว่าโปรแกรมใดควรมีฟังก์ชันหลักเพียงฟังก์ชันเดียว?)
ไฟล์ซอร์สโค้ดที่จำเป็นทั้งหมดอยู่ในโฟลเดอร์ย่อยแล้ว โดยที่คุณได้คลายแพ็กซอร์สโค้ดแล้ว ไฟล์ส่วนหัวสมควรได้รับคำสองคำ จะหาได้จากที่ใด "list.h" - มักจะอยู่ในโฟลเดอร์ย่อย "include" ของชุดซอร์สโค้ดที่คลายการแพ็ก "version.h" - แค่สร้างมันขึ้นมาเอง ใส่สตริงเช่น:
#define เวอร์ชัน "Win32"
จากนั้นบันทึกและปิดไฟล์ (คุณอาจตกแต่งด้วย #define's และ #ifdef's ถ้าคุณต้องการ)
ถ้าตอนนี้คุณพยายามคอมไพล์โปรเจ็กต์ มันจะบ่นเกี่ยวกับข้อผิดพลาดมากมายและไฟล์ที่ขาดหายไปหนึ่งไฟล์ ข้อผิดพลาดส่วนใหญ่เกิดจากความอิสระของรูปแบบที่มากเกินไป โปรแกรมเมอร์ sunxi-tools ที่ใช้ในการปรับใช้ และไฟล์ที่ขาดหายไปคือการพึ่งพาที่ไม่รวมอยู่ในชุดของซอร์สโค้ด ให้จัดการกับขั้นตอนนี้ทีละขั้นตอน
ขั้นตอนที่ 8: ให้ Gcc ปฏิบัติตามมาตรฐานภาษา ISO C ปี 1999
เพื่อให้คอมไพเลอร์ไม่บ่นว่ารูปแบบการเขียนโปรแกรมฟรีเกินไปให้ตั้งค่ามาตรฐาน "с99" ของการรวบรวม ใน codeblocks ให้ไปที่เมนู "Project -> Build Options" และใน "Compiler Settings -> Compiler Flags" ให้เลือกช่องทำเครื่องหมาย "มี gcc ปฏิบัติตามมาตรฐานภาษา ISO C 1999" หรือคุณสามารถเพิ่ม "-std=c99" ลงในสตริงตัวเลือกคอมไพเลอร์ของคุณ ตอนนี้ถ้าคุณพยายามคอมไพล์โปรเจ็กต์ ข้อผิดพลาดมากมายเหล่านั้นควรหมดไป และคุณเป็นหนึ่งต่อหนึ่งที่มีการพึ่งพาที่ขาดหายไป
ขั้นตอนที่ 9: ค้นหาการพึ่งพาที่ขาดหายไป
การพึ่งพาที่ขาดหายไปคือไฟล์ "mman.h" - ส่วนหัวของตัวจัดการหน่วยความจำ linux บางประเภท Windows C โดยกำเนิดไม่มีไฟล์ดังกล่าว แต่โชคดีที่มีพอร์ต windows ของมัน ไปที่ https://github.com/witwall/mman-win32 สำหรับ windows ดาวน์โหลดสแน็ปช็อตของที่เก็บ git
ขั้นตอนที่ 10: แกะ Mman
แตกไฟล์ mman.c และ mman.h แล้ววางลงในโฟลเดอร์ c:\sunxitools
ขั้นตอนที่ 11: และเพิ่มลงในโครงการ
ขั้นตอนที่ 12: เส้นทางที่ถูกต้อง
และในไฟล์ "fex.c" raplece line:
#รวม
เพื่อ
#รวม "mman.h"
ในขั้นตอนนี้ คอมไพเลอร์ของคุณไม่ควรบ่นอะไรเลย และคุณจะได้รับ fexc.exe ที่รอนานเป็นผลลัพธ์ อย่ามีความสุขเร็วเกินไป ยูทิลิตี้ยังทำงานได้ไม่เต็มที่ คุณสามารถตรวจสอบได้โดยถอดรหัสไฟล์ script.bin ที่ถูกต้องในรูปแบบข้อความ - ไฟล์ script.fex โดยเข้ารหัสไฟล์ script.fex กลับเข้าไปใน script.bin คุณอาจสังเกตว่าขนาดของ script.bin ที่ได้นั้นแตกต่างจากขนาดของ script.bin ดั้งเดิมเล็กน้อย และถ้าคุณพยายามถอดรหัสผลลัพธ์อีกครั้งก็จะล้มเหลว Orange PI จะไม่ทำงานกับ script.bin นี้ เพื่อให้ได้ยูทิลิตีการทำงาน เราต้องปล่อยโค้ดบอมบ์ ซึ่งมีคนใส่ซอร์สโค้ดของ sunxi-tools มันจะเป็นขั้นตอนต่อไปของเรา
ขั้นตอนที่ 13: การไล่ผี
ในการปลดปล่อยโค้ดบอมบ์ ให้เปิดไฟล์โค้ด fexc.c และพบว่ามีสตริงข้อความของเนื้อหาถัดไป:
อื่น if ((ออก = เปิด (ชื่อไฟล์, O_WRONLY|O_CREAT|O_TRUNC, 0666)) < 0) {
เพียงแทนที่ด้วยสตริงถัดไป:
อื่น if ((ออก = open(ชื่อไฟล์, O_WRONLY|O_CREAT|O_TRUNC|O_BINARY, 512))<0){
ถ้าไม่ใช่เลขร้าย "666" ในสตริงแรก ฉันคิดว่าผู้เข้ารหัสเพิ่งลืมใช้แฟล็ก O_BINARY แต่ Number of The Beast ได้ชี้แจงเจตนาของเขาอย่างโปร่งใส ลองคิดดูสิว่ามันฉลาดแค่ไหน: เนื่องจากความแตกต่างเล็กน้อยในการประมวลผลไฟล์ใน Windows และ Linux ระเบิดไม่มีผลเมื่อยูทิลิตี้ถูกคอมไพล์และใช้งานภายใต้ Linux แต่มันทำลายทุกอย่างเมื่อใช้ยูทิลิตี้ภายใต้ Windows
หลังจากที่ระเบิดถูกปลดอาวุธแล้ว ในที่สุด คุณสามารถคอมไพล์และใช้ยูทิลิตี้ fexc บนคอมพิวเตอร์เดสก์ท็อป Windows ของคุณได้อย่างปลอดภัย
ขั้นตอนที่ 14: หมายเหตุ
1) ในการใช้ยูทิลิตี้ fexc อย่างสะดวกสบาย คุณควรได้รับไฟล์แบตช์สองไฟล์:
bin2fex.bat - และ - fex2bin.bat
คุณสามารถรับได้จาก fexc.exe build สำหรับ Windows ที่ล้มเหลวหรือคุณสามารถพิมพ์เองได้:
- bin2fex.bat ควรมี "fexc -I bin -O fex script.bin script.fex"
- fex2bin.bat ควรมี "fexc -O bin -I fex script.fex script.bin"
2) หากเป็นเรื่องยากที่จะหาตัวจัดการ mman สำหรับ Windows เราสามารถหลีกเลี่ยงการใช้งานได้เลย อย่างไรก็ตาม ต้องใช้เวลาในการแก้ไขไฟล์ fexc.c มากขึ้นและต้องการความรู้เกี่ยวกับ c อย่างน้อย เพื่อความมั่นใจของคุณ ฉันแบ่งปันซอร์สโค้ดที่แก้ไขแล้วของ fexc จาก sunxi-tools v1.4 ที่ปราศจากการพึ่งพา mman.h พร้อมกับไฟล์โครงการ codeblocks และตัวอย่าง script.bin จาก pi สีส้มบางส่วน คุณสามารถดาวน์โหลด fexc_nomman.zip
3) เป็นไปได้ว่าในรุ่นต่อมาของ sunxi-tools พวกเขาจะเพิ่มการพึ่งพาเพิ่มเติม คุณสามารถค้นหาได้ทางอินเทอร์เน็ตและเพิ่มลงในโครงการรวบรวมของคุณ
5) สุดท้ายนี่คือ fexc.exe เวอร์ชันที่คอมไพล์ล่วงหน้าสำหรับ Win32:
fexc_nomman.zip
หากคุณขี้เกียจมากพอให้ใช้ ver. อย่างไรก็ตาม ระวังว่าจะไม่ได้รับการอัปเดตหาก/เมื่อ SunxiTools/Windows เวอร์ชันใหม่กว่าจะพร้อมใช้งาน ดังนั้นจึงเป็นการดีกว่าที่จะเรียนรู้วิธีการคอมไพล์มากกว่าการพึ่งพาการสร้างไบนารีแบบคงที่บางตัวฉันเข้าใจ
4) "Orange PI", "Code::Blocks", "Windows", "Linux", "Sunxi-Tools", "Allwinner" ฯลฯ… เป็นเครื่องหมายการค้าของเจ้าของที่เกี่ยวข้อง
5) หากคุณคอมไพเลอร์บ่นว่าไม่พบฟังก์ชัน mman เช่น:
ไม่ได้กำหนดการอ้างอิงถึง '_imp_mmap'
พึงระวังว่าผู้ชื่นชอบชุมชนพัฒนา mman นั้นลืมไปว่าโค้ดนั้นสามารถคอมไพล์ได้ไม่เพียงแต่เป็นไลบรารี่ dll เท่านั้น นอกจากนี้ยังสามารถเป็นไลบรารีแบบคงที่หรือโค้ดแบบสแตนด์อโลนเหมือนที่เรามีที่นี่ ในการแก้ไขปัญหาให้แก้ไขไฟล์ "mman.h" ดังนี้:
ก) ค้นหาสตริง:
#if กำหนดไว้ (MMAN_LIBRARY)
#define MMANSHARED_EXPORT _declspec (dllexport) #else #define MMANSHARED_EXPORT _declspec (dllimport) #endif
b) เพิ่มสตริง
#define MMANSHARED_EXPORT
ด้านล่างสตริงที่พบในขั้นตอนก่อนหน้า