ディスプレむずしおの電子曞籍

䞀般的なものの型砎りな䜿甚は、私たちが垞に興味を持っおいるものです 結局、別のデバむスをハングアップしたい堎合がありたす。 それがどのように機胜するかを理解し、新しい機胜を远加するこずによりその動䜜を調敎したす。


写真を衚瀺する

叀いSony PRS-505リヌダヌを䟿利なディスプレむに倉える方法を説明したす。 たた、この本甚に独自のプログラムを䜜成する方法も教えおください



問題の声明



あるデバむスでは、グラフず実隓デヌタを衚瀺するディスプレむが必芁でした。 デヌタはめったに衚瀺されたせんが、ディスプレむは䜎電力で、倧きく、解像床が高いこずが望たしいです。
゜ヌスデバむスはLinuxで実行され、USBホストがありたす。 最初はVogueディスプレむに目を向けたしたが、サむズず解像床が小さいため、それを华䞋したした。 圌はさらに怜玢し始めたした。
私は長い間、電子曞籍PRS-505の呚りに暪たわっおいたした。 私はそれを取り出しお目の前に眮いた。䞭にはLinuxがあり、どこかでコン゜ヌルからアクセスできるず聞いた。 しかし、このこず自䜓がそれであるこずも認識しおいたす。 眮き忘れお。

しばらくしお、友人のVshmukずキャンプに行ったずころ 、突然同じ本を読んでいるこずがわかりたした。 そしお圌は自分の考えを圌に話したした。 銬鹿げたこずに応じお-刀明したように、尊敬された同志はか぀おこの本にハヌドりェアにアクセスする方法に぀いおの蚘事をハッカヌに曞きたした。あなたもそれを扱うこずができたす。

ハむキングをする普通の人は自然を楜しみたす...

Linuxを理解しおいない人のために、フレヌムバッファは䞀般的なデバむスず同様にLinuxファむルであり、その䞭に理論的にメモリヌスナップショットファむルを曞き蟌み、画面に衚瀺できるこずを説明したす。 ハヌドりェアのスクリヌンショットを撮るこずもできたす。 このファむルを別の堎所にコピヌしおビデオメモリをダンプし、コピヌたたは曞き蟌みしお衚瀺したす。

これが必芁な理由
なぜこれが必芁なのかたずえば、タヌゲットマシンでは、仮想スクリヌンぞのビデオ出力があり、その解像床は本の解像床぀たり600x800に等しくなりたす。 その埌、定期的に仮想スクリヌンフレヌムバッファファむルが取埗され、SOMポヌトにリダむレクトされたす。その最埌に、comコマンドからcatコマンドを䜿甚しお、これが本のフレヌムバッファにリダむレクトされたす。

すべおのコマンドはタヌゲットマシンで実行され、本はUARTを介しお、/ dev / ttyUSB0でハングするVCPを介しお接続されおいるこずを瀺したす。 コマンドは、たずえばクロヌネで数分ごずに呌び出されたす。

echo "cat / dev / ttyS0> / dev / fb0"> / dev / ttyUSB0

このUARTコマンドは、COMポヌトファむルの内容をフレヌムバッファヌにリダむレクトするコマンドを送信したす。 次に、2番目のコマンドがありたす。

猫/ dev / fbn> / dev / ttyUSB0

このコマンドは、fbn仮想画面nは画面番号の内容をCOMポヌトに転送したす。 すべおが正垞に機胜するはずです。ファむルの終わりの文字が到着するず転送が終了したす。


ビゞネスに取り掛かる



壮倧な旅から戻ったずき、圌の蚘事www.xakep.ru/magazine/xa/129/092/1.aspを探しお 、それが始たりたした。

最初に、本を分解し、むンタヌフェむスペアリングにft232rlチップを䜿甚しおデバッグコン゜ヌルにはんだ付けしたした私の投皿「UARTずその甚途」 -habrahabr.ru/post/109395を参照 


はんだ付けされたむンタヌフェヌスを備えたパッチなしリヌダヌ


背面図

はんだ付けする方法ずコンタクトの詳现に぀いおは、 www.the-ebook.org / forum / viewtopic.phpp = 120092120092をご芧ください。

ログむン方法、どのプロセスを匷制終了する必芁があるかなど、Vshmuk 同志による蚘事を匕甚したくありたせん。この蚘事で圌から読むのが最善です。 蚀えるのは、本が暙準のUSBを介しおコンピュヌタヌに接続されおいる堎合、プロセスを匷制終了する必芁はなく、すべおがそのように機胜するこずが経隓的に確立されおいるずいうこずです。 タヌミナルずしお私はお気に入りのミニコムを䜿いたす。
はんだ付け埌、OSの研究を始めたした。 䜕よりもたず、スクリプトを調べたした。スクリプトは蚘事に蚘茉されおおり、すべおをマりントし、ブヌトむメヌゞを衚瀺したす。 これがどんな獣なのか芋おみたしょう。

ルヌト@なし/cat /etc/rc.d/rcS.d/S20libromount

そこに萜ちたすべおのフォアメッシュの䞭で、私たちはこれに最も興味を持っおいたす

# display booting image /usr/local/sony/bin/nblconfig -dump | head -3 | awk '{print $9}' | grep 02 > /dev/null if [ $? == 0 ]; then # init screen load grep BootImg /proc/mtd > /dev/null if [ $? == 0 ]; then NUM=`grep BootImg /proc/mtd | awk -F: '{print $1}' | awk -Fd '{print$2}'` dd if=/dev/mtd$NUM of=/dev/fb0 bs=256 count=1875 /opt/sony/ebook/bin/writescreen init 0 else /opt/sony/ebook/bin/writescreen init 1 echo no boot image fi else /opt/sony/ebook/bin/writescreen init 1 fi ... 


ランダムな力でスクリヌンをハンマヌで打ずうず決心し、このコマンドを䜜成したした。

ルヌト@なし/dd if = / dev / urandom of = / dev / fb0 bs = 256 count = 1875
1875 + 0レコヌド
1875 + 0レコヌド
しかし、䜕も起こりたせんでした...

次のコマンドを詊しおみたしょう。

ルヌト@なし// opt / sony / ebook / bin / writescreen init 0
0x00035000から読み取られた最新のnblconfig
0x00035800に曞き蟌たれた最新のnblconfig
そしお...奇跡は起こらなかった。 たた、チヌム
ルヌト@なし// opt / sony / ebook / bin / writescreen init 1

銬鹿げお画面ずすべおを消し、その埌、圌はもはや生呜の兆候を芋せたせんでした。

䞀般に、問題を簡単に解決するこずはできたせんでした。 そのため、ハヌドりェアに切り替えたした。 现い線からのこれらの錻は簡単に倖れるこずがあるので、私は本をより正確にする方法を考え始めたした。 その結果、ヘッドフォンゞャックからデバッグコン゜ヌルを匕き出したした。 そこでは、コネクタのすぐ隣のメヌカヌがれロ抵抗の抵抗噚を提䟛したした。これを2本のRX線ずTX線を安党に取り倖しお吊り䞋げ、ヘッドフォンからグランドを残したした。 圌女は数ず電気的に解けおいたせんでした。


オヌディオゞャックぞのデバッグポヌトの出力

実隓を終えた埌、コン゜ヌルを介しおファむルを盎接駆動しようずするこずにしたした。 これは、2本のワむダを匕っ匵らず、フラッシュドラむブのリ゜ヌスを消費しないようにするために必芁ですUSBフラッシュドラむブに画像を蚘録しおから再生。 本からコンピュヌタに完党に移行できたしたが、元に戻せたせん。

実隓のために、私は画像ファむルを転送しようずしたした。 ブヌトむメヌゞ出力スクリプトに぀いおはすでに話したこずを芚えおいたすか 圌はリヌダヌのNANDフラッシュドラむブセクションからそれを読み取り、フレヌムバッファに曞き蟌みたす

NUM = `grep BootImg / proc / mtd | awk -F '{print $ 1}' | awk -Fd '{print $ 2}' '
dd if = / dev / mtd $ NUM of = / dev / fb0 bs = 256 count = 1875
/ opt / sony / ebook / bin / writescreen init 0

最初の行は、画像が存圚するセクションを定矩したす。 このコマンド単䞀匕甚笊で囲たれおいたすを実行し、セクション番号を芋぀けたす。 私の堎合、9に等しかったです。

それでは、2番目のコマンドを少し修正しお、転送がCOMポヌトに行われるようにしたす。 経隓的に、受信ず送信のコン゜ヌルはファむル/ dev / ttyであるこずを確認したした。 画像を転送したす。そのために、コンピュヌタヌのタヌミナルを閉じお実行したす。

cat / dev / ttyUSB2> bootimg.raw 、ここでttyUSB2はft232rlベヌスのVCPむンタヌフェヌスです。

次に、別のコンピュヌタヌコン゜ヌルで次のコマンドを実行したす。

echo "dd if = / dev / mtd9 of = / dev / tty bs = 256 count = 1875"> / dev / ttyUSB2は、コン゜ヌルを介しおコン゜ヌル経由でむメヌゞを転送するコマンドを送信したす。

この画像をバむナリキャストからpngに倉換したす。

echo -e "P5 \ n800 600 \ n255 \ n"> result.pgm
猫bootimg.raw >> result.pgm
倉換result.pgm result.png

その結果、たさにそのような写真が埗られたす。 なぜオヌバヌシュヌトしたのかはわかりたせんが、明らかにいく぀かの䌝送゚ラヌがありたした。

画像
結果の画像

ずころで、フレヌムバッファに曞き蟌むこずができる画像ずは䜕ですか これはビットマスクであり、各バむトはピクセルの色に等しく、正確に800x600 = 480000バむトの重さです。 したがっお、フレヌムバッファに転送する画像のサむズは800x600で、重量は正確に480000バむトでなければなりたせん。 本質的に、これは* .pgmファむルであり、カットオフヘッダヌのみがありたす。
逆に、ファむルを転送できたせんでした。 どうやら、コン゜ヌルは暙準入力デバむスであり、印刷できない文字を奜たないためです。 これらの実隓の詳现に぀いおは、 dlinyj.livejournal.com / 608961.htmlをご芧ください 。

私はただプログラムで䜜業できないこずに気付いたので、このこずを劚げるものは䜕もなかったので、本をケヌスに入れるこずにしたした。

システム、スクリプトを調査した埌、コン゜ヌルツヌルを䜿甚しお画像を衚瀺できないこずが明らかになりたした。 圌らはすでに1人の友人がこの問題を解決しおいお、圌のブログsystemsand.me/sony-prs-300prs-505-hackでさえ説明しおいるず私に蚀った。 ぀たり、プログラムは非垞に簡単ですが、䜜成する必芁がありたす。

私はここからツヌルチェヌンをダりンロヌドしたしたより簡単に蚀うず、アセンブリ甚のコンパむラヌですが、これは完党に正確ではありたせん。お気に入りのubuntuに。 そしお、こんにちは蚀葉を構築しようずしたした

参考のために、圌はコマンドarm-none-linux-gnueabi-gcc -mcpu = arm920t hello.c -o helloを䜿甚する予定でした。

最も重芁なこずは、受け取ったファむルを本に転送する方法でした。 USBを接続するず、玄200メヌトルのボリュヌムを持぀特定のディスクがコンピュヌタヌに衚瀺されるこずに気付きたした。 しかし、本のシステムではそうではありたせん。

私はKnikzhiファヌムりェアのすべおの本を持っおいたすが、ハヌドディスクが本のアプリケヌションで䜿甚されおいるこずに気付きたしたデバむスの目的を意味したす。 これはcramfs.Fsk.imgファむルです
この画像をコンピュヌタヌにマりントし、sony / ebook / bin / tinyhttp.shスクリプトを確認したした。 これを行う方法は、Hackerの蚘事で再び説明されおいたす。 Trolo pysch pysch、誰も読たない。 Vshmukの蚘事によるず、これはたさにコン゜ヌルを取埗する最初の段階で絞殺したスクリプトです。 そしお、このような行がありたした

NUM = `grep Data / proc / mtd | awk -F '{print $ 1}' | awk -Fd '{print $ 2}' '
/ usr / local / sony / bin / mkdosfs / dev / mtdblock $ NUM

繰り返したすが、最初の行はデバむス番号を取埗したす。 最初のスクリプト匕甚笊で囲たれたものを実行するず、番号17が取埗され、/ tmp / t1に/ dev / mtdblock17がマりントされたした。 これがフラッシュドラむブになるこずをどのように理解したかを説明するこずはできたせんが、ナヌザヌデヌタの初期化を行う必芁があるのはこのファむルにあるこずだけがロゞックから瀺唆されたした。

その結果、コンピュヌタヌに衚瀺されるディスクの内容を芋たした。

そしお、私はそれを実行しようずするこずにしたした

ルヌト@なし/ tmp / t1ls
Digital Editions autorun.infデヌタベヌスhello tmp
ルヌト@なし/ tmp / t1cp hello / tmp /
ルヌト@なし/ tmp / t1cd ...
ルヌト@なし/ tmpls
こんにちはt1
ルヌト@なし/ tmp./hello
bash./helloそのようなファむルたたはディレクトリはありたせん
ルヌト@なし/ tmpchmod + x hello
ルヌト@なし/ tmp./hello
bash./helloそのようなファむルたたはディレクトリはありたせん

賢い人々は、必芁なラむブラリがそこにないかもしれないず瀺唆し、-staticオプションでビルドするこずを勧められたした。 その埌、事態は悪化したした

ルヌト@なし/ tmp./hello
セグメンテヌション障害

コンパむラを探す必芁があるこずが明らかになりたした。 倚くの人々の助けのおかげで、私は圌らがこの本の代替openinkpot.org/wikiファヌムりェアを芋おいるこずを知りたした したがっお、ツヌルチェヌンが必芁です。

「prs-505ツヌルチェヌン」をグヌグル怜玢し始めたした。code.google.com/p/ prs- plus/downloads/detail?name=arm -toolchain- sony-300.tar.gz&can=4&q=で芋぀かりたした。 その埌、Hello Wordは問題なく静的でなくおも起動したした。 さお、技術的な問題は、 systemsand.me / sony-prs-300prs-505-hackによるず、小さなプログラムをスケッチした

 /* showpic.c */ #include <stdio.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <sys/ioctl.h> #include <sys/mman.h> #include <string.h> #define FBIO_EINK_GET_TEMPERATURE 0x46A1 //Returns temperature in degree Celsius #define FBIO_EINK_DISP_PIC 0x46A2 //Displays picture int main (int argc, char* argv[]) { printf ("Show image\n"); int *fb, *image; int pio_fd = open ( "/dev/fb0", O_RDWR); int f_image = open ( argv[1], O_RDWR); //open file into arg int t= ioctl (pio_fd, FBIO_EINK_GET_TEMPERATURE, NULL); //configure framebuffer fb= mmap(0, 800*600, PROT_WRITE, MAP_SHARED, pio_fd, 0); //map device into memory image= mmap(0, 800*600, PROT_READ, MAP_SHARED, f_image, 0); //load image into memory memcpy(fb,image,800*600); ioctl (pio_fd, FBIO_EINK_DISP_PIC, 0); close(pio_fd); close(f_image); return 0; } 


定矩は、Sony Webサむトwww.sony.net/Products/Linux/Audio/PRS-505.html file 8track20070714.tgzのドラむバヌによっおコヌドから取埗されたした。

最小限のオプションでプリミティブコマンドをコンパむル toolchain / arm-unknown-linux-gnu-gcc -static showpic.c -o showpicぞのパス

静的なしでは、私は働きたくありたせんでした。

gimpで、800x600の解像床の画像を䜜成し、必芁なものを描画しおhabrahabr.pgmずしお保存したす。


私の芞術

あなたは私の芞術を蚱したす。 私は䞀生懞呜やるのが面倒でした。

その埌、任意の16進゚ディタで開き、タむトル党䜓をFFに削陀したす


タむトルを削陀する

ハヌドドラむブの本に蚘入したす。 コン゜ヌルに登っお実行したす

ルヌト@なし/cd tmp /
ルヌト@なし/ tmpmkdir t1
ルヌト@なし/ tmpmount / dev / mtdblock17 t1
ルヌト@なし/ tmpcd t1 /
ルヌト@なし/ tmp / t1ls
デゞタル版autorun.inf habrahabr.raw showpic
a.outデヌタベヌスsend.raw tmp
ルヌト@なし/ tmp / t1./showpic habrahabr.raw
画像を衚瀺
ルヌト@なし/ tmp / t1

そしお私達は芋る


ファヌシュマック

ああ この写真は倉えたせんでした。 元の画像をgimpで90床回転し、手順を繰り返したす。 その結果、芖線が衚瀺されたす


蚌明するために䜕が必芁でしたか

たずめ



私はなんずか本のプログラムを曞いお、写真を衚瀺するこずさえできたした。 目暙はgnuplotのグラフィックスを衚瀺するこずだず蚀わなければなりたせん。 このパッケヌゞは、pgmファむル自䜓を完党に生成できたす。残りは、ヘッダヌを切り取るddコマンドだけです。


グラフの䟋

ただ解決されおいない䞻な問題は、チャヌトファむルをブックに転送する方法です。 デバッグコン゜ヌルから盎接これを実行したかったのですが、そのためにはコン゜ヌルから離しお、通垞のUARTに倉換できるようにする必芁がありたす。 これを行う方法がわかりたせん。 たた、私はその堎でそれを行うず思いたす。
圌らは、デバむスがUSB経由でCOMポヌトのように芋えるようにドラむバヌを構築できるず蚀っおいたすが、これは同じギモラをもたらす可胜性があるように思えたす。 USBフラッシュドラむブにフォルダヌを䜜成し、RAMに仮想の䞀時ファむルシステムをマりントするこずができるず思いたす。 この方法はただ詊しおいたせん。 しかし、USBフラッシュドラむブを介しおファむルを転送するのは䞍合理で䞍合理な決定です。
䞀般に、質問は未解決のたたであり、この䞻題に関するすべおの合理的な提案を聞く準備ができおいたす。

謝蟞


この奇劙なプロゞェクトを助けおくれたすべおの人々に感謝したす。 もっずあるずいいな

参照


1.私が実隓を始めたハッカヌの元の蚘事www.xakep.ru/magazine/xa/129/092/1.asp 。
2.本をはんだ付けする手順www.the-ebook.org/forum/viewtopic.php?p=120092#120092
3.残念ながら、 同類のSystemsand.me/sony-prs-300prs-505-hackによっお同様の問題が解決されたした。圌は゜ヌスずツヌルチェヌンを手䌝うこずができたせんでした。
4.本のファヌムりェアおよびドラむバヌの゜ヌステキストwww.sony.net/Products/Linux/Audio/PRS-505.html
5.代替ファヌムりェアopeninkpot.org/wikiのオヌプンプロゞェクト
6.Working toolchain code.google.com/p/prs-plus/downloads/detail?name=arm-toolchain-sony-300.tar.gz&can=4&q=
7.本に関する私の苊痛に぀いおは、私のLJで読むこずができたすdlinyj.livejournal.com/tag/prs-505

PS私は非垞に有胜な人ではありたせん。私はしみのあるプラむベヌトなメッセヌゞにずおも感謝したす。
PPS、私も喜んでコメントを受け入れたす。 私はクヌルなLinux゜フトりェア開発者ではありたせんが、実際に1人になりたいず思っおいたす:)。

投皿に察する著者ぞの最高の感謝を忘れないでください-これはコメントです

UPD寝おいる間に、テキスト入力ずコン゜ヌルの問題を解決する方法を芋぀けたした。 ファむルがテキスト圢匏で送信されるのを劚げるものは䜕もありたせん。 kinsoliからのデヌタを受け入れ、それに2぀のコマンドを枡すように、ファむルを少し曞き換える必芁がありたす。
startは転送の開始で、 stopは終了です。 次に、送信されたファむルを゜ヌスコンピュヌタヌでバむト単䜍で読み取り、バむトをニブル半分のバむトに分割したす。 ニブルは、0から15の倀、たたは0からFの16進数の倀を取りたす。たあ、文字を0からFに転送したす。本の偎面で、テキストニブルをバむトに逆倉換したす。 転送の開始は、開始、停止の終了を意味したす。 コン゜ヌルの゚コヌ䌝送を制埡したす。
所芁時間は2倍になりたすが、解決策は最も単玔で明癜です。
私はプログラムを曞くために走りたした
UPD-UPD 5幎埌、圌は本を時蚈に倉えるプログラムを曞きたした。 Github.com/dlinyj/sony_prs-505_clock githubコヌド

Source: https://habr.com/ru/post/J274831/


All Articles