პორტირების შემდეგ Linux Sega MegaDrive-ს ახლა უკვე შეუძლია ბირთვის გაშვება. Linux 1993 წელს გამოშვებული Atari Jaguar სათამაშო კონსოლი Busybox-ის უტილიტების პაკეტით. კონსოლი აღჭურვილი იყო Motorola 68000 პროცესორით, 2 მბ ოპერატიული მეხსიერებით და მუდმივი შენახვისთვის 6 მბ-მდე კარტრიჯების გამოყენებით. მოწყობილობა აღჭურვილი იყო ორი თანაპროცესორით: Tom (32-ბიტიანი RISC გრაფიკული პროცესორი, 64-ბიტიანი ვიდეო პროცესორი და 64-ბიტიანი ლოგიკური პროცესორი) და Jerry (32-ბიტიანი RISC DSP აუდიოსთვის).
Sega MegaDrive პორტის მსგავსი ბირთვის შესრულებისთვის Linux Motorola 68000 CPU-ზე, რომელსაც არ გააჩნია აპარატურული მეხსიერების მართვის ბლოკი (MMU), საწყის 7.2.0-rc1 ბირთვი კომპილირდა მიკროკონტროლერებისთვის გამოყენებულ „NOMMU“ რეჟიმში, რაც საშუალებას იძლევა შეიქმნას ბრტყელი მეხსიერების მოდელი წრფივი მისამართების სივრცით. (ადრე, MMU-ს გარეშე მუშაობის შემუშავებები შემუშავდა uClinux ბირთვის განშტოებაში, მაგრამ მოგვიანებით ისინი მთავარ ბირთვში „NOMMU“ ოფციის სახით იქნა გამოყენებული.) ოპერატიული მეხსიერების არასაკმარისი რაოდენობის პრობლემა სხვაგვარად მოგვარდა, ადგილზე შესრულების (XIP) მექანიზმის გამოყენებით, რომელიც საშუალებას იძლევა ბირთვის კოდი პირდაპირ შესრულდეს ROM-დან მისი RAM-ზე კოპირების გარეშე.
მოწყობილობაზე ოპერატიული მეხსიერება აისახება 0x000000 მისამართზე, ხოლო ROM (კარტრიჯი) - 0x80000 მისამართზე, შესაბამისად, ბირთვის კომპონენტები. Linux შეწყვეტის ვექტორული ცხრილები ორ ცალკეულ მეხსიერების არეალად იყო დაყოფილი: .rodata და .text სექციები, რომლებიც შეიცავდა მუდმივებსა და კოდს, განთავსებული იყო კარტრიჯზე, ხოლო .data და .bss სექციები, რომლებიც შეიცავდა ცვლად მონაცემებს, განთავსებული იყო ოპერატიულ მეხსიერებაში. ვინაიდან 68000 CPU ეძებს შეწყვეტის ვექტორულ ცხრილს 0x0 მისამართზე, ხოლო ბირთვი რეალურად მდებარეობს კარტრიჯზე, რომლის შინაარსიც აისახება 0x80000 მისამართზე, შეწყვეტის ვექტორების ოპერატიულ მეხსიერებაში კოპირებისთვის გამოყენებული იქნა დამატებითი ჰაკი.
Motorola 68000 CPU-ში ტაიმერის არარსებობის პრობლემა მოგვარდა DSP-ში ხმის სინთეზისთვის გამოყენებული ტაიმერების გამოყენებით. ეს ტაიმერები გამოიყენებოდა დავალებების დამგეგმავის გასააქტიურებლად შეფერხებების გენერირებისთვის. ჩატვირთვის დროს ბირთვის შეტყობინებების საჩვენებლად დაიწერა ცალკე კონსოლის დრაივერი, რომელიც ახდენდა პარალელური პორტის სიმულირებას TXD და RXD ქინძისთავების მეშვეობით, რომლებსაც DSP პროცესორი აკონტროლებდა.
მომხმარებლის სივრცის კომპონენტების ასაწყობად გამოყენებული იქნა Buildroot ინსტრუმენტარიუმი პროექტის პატჩებით. LinuxMD. ინიციალიზაციის დროს მეხსიერების დაზოგვის მიზნით, "/bin/busybox sh" ბრძანების გარსი პირდაპირ გამოიძახეს, uClibc ბიბლიოთეკაში malloc ფუნქცია შეიცვალა გამარტივებული ვერსიით, malloc-simple-ით, რომელიც არ ინახავს დამატებით მეტამონაცემებს და U-Boot-ის მსგავსი სრულფასოვანი ჩატვირთვის ნაცვლად, კონტროლი პირდაპირ ბირთვზე გადავიდა "jmp $80000" ბრძანების გამოყენებით.

წყარო: opennet.ru
