Kindle-ის მფლობელთა უმრავლესობა მოწყობილობას მხოლოდ წიგნების საკითხავად იყენებს, თუმცა ტექნოლოგიურმა ენთუზიასტმა Sverre-მ გადაწყვიტა, თავისი მე-7 თაობის Kindle Paperwhite სრულიად სხვა დანიშნულებით გამოეყენებინა. მას შემდეგ, რაც მოწყობილობაზე ჯეილბრეიკი (jailbreak) განახორციელა, მიზნად დაისახა, მასზე პროგრამირების ენა Rust გაეშვა.

ტექნიკური გამოწვევები და გადაწყვეტა

მთავარი სირთულე ARMv7 არქიტექტურასა და musl libc-ის მხარდაჭერაში მდგომარეობდა. როგორც ავტორი აღნიშნავს, დაბალპროცესორული სიმძლავრის მქონე მოწყობილობებზე Rust-ის კომპილაცია თითქმის შეუძლებელია, ამიტომ მან ეფექტური ალტერნატივა — cargo-zigbuild გამოიყენა. ეს ინსტრუმენტი Zig კომპილატორის დახმარებით საშუალებას იძლევა, მარტივად მოხდეს კოდის ადაპტირება Kindle-ის არქიტექტურისთვის.

მოწყობილობაზე წვდომისთვის ავტორმა USBNetwork-ის მეშვეობით SSH კავშირი დაამყარა, რაც აუცილებელი იყო პროგრამის მუშაობის შესამოწმებლად და სისტემური შეცდომების მონიტორინგისთვის.

გრაფიკული ინტერფეისი და e-ink ეკრანი

პროგრამირების ენის გარდა, მთავარი მიზანი გრაფიკული ინტერფეისის (GUI) შექმნა იყო. არჩევანი Slint-ზე შეჩერდა, რომელიც მსუბუქი და ეფექტური ბიბლიოთეკაა. Kindle-ის e-ink ეკრანთან მუშაობისთვის ავტორმა გამოიყენა ლინუქსის ფილოსოფია: „ყველაფერი ფაილია“.

  • ეკრანის გამოსახულება იმართება /dev/fb0 ფაილის მეშვეობით, სადაც გრაფიკული მონაცემები მეხსიერებაში იწერება.
  • ეკრანის განახლება ხორციელდება ioctl() ბრძანებით, რომელიც „ათავისუფლებს“ სურათს e-ink პანელზე.
  • სენსორული პანელის მართვა ხდება /dev/input/event1 ფაილიდან მონაცემების კითხვით, რაც მრავალშეხებიან (multi-touch) რეჟიმს უჭერს მხარს.

მიუხედავად იმისა, რომ პროცესი რთული იყო და მრავალ შეცდომასთან იყო დაკავშირებული, საბოლოოდ, ავტორმა მოახერხა მარტივი ინტერფეისის — მრიცხველისა და ღილაკის — გაშვება. მან შექმნილი კოდი დაარქივებული სახით, როგორც ცალკეული ბიბლიოთეკა, საჯაროდ ხელმისაწვდომი გახადა.

ეს პროექტი კიდევ ერთხელ ადასტურებს, რომ „დახურული“ ეკოსისტემის მქონე მოწყობილობებიც კი, როგორიც Kindle-ია, საინტერესო პლატფორმას წარმოადგენს პროგრამისტებისთვის, რომლებსაც სურთ საკუთარი პროგრამული უზრუნველყოფის შექმნა და გამოცდა.