s-hosoda
2016年8月25日 13時55分
お世話になります。
開発中のソフトウェアの出力ログを不揮発エリアに書き込むという要件を満たすため,
フラッシュメモリの未使用エリアを利用したいと思っています。
ありがたいことに,以下のブログにまさにやりたい手順が示されているので,参考に
させてもらい,ファイル名などを840に読み替えてトライしてみました。
Armadillo-810: ユーザーランド領域を分割してみる
https://users.atmark-techno.com/blog/750/2142
しかし残念ながら,make した kernel では起動してくれませんでした。
#メモリマップの違いさえ気を付ければ同じ方法でArmadillo-840でも実現できると思います。
と示して頂いているのですが,ソース編集の場面で特に違いを意識するようなところが,
思い当たらず,ブログの手順と同じ内容で更新しました。
「3.1 カーネルのコンフィギュレーションを実行」は linux-3.x に移動して実行しました。
以下2点教えて頂けないでしょうか。
①メモリマップの違いをどのように反映されば良いでしょうか。
②起動時に何がまずいのかを,確認する方法はあるでしょうか。
以上,宜しくお願い致します。
コメント
s-hosoda
笹山様
お世話になります。
メモリマップについて,ブログのような2つのファイルの編集内容で,約70MB弱のエリアを
確保することを想定していました。
起動失敗について,
make armadillo840_nor_defconfig に読み替えて実行しました。
示して頂いたようなログの出力にはいたらず,watchdog timedoutで解凍を
繰り返し続けています。
Hermit-At v3.7.0 (Armadillo-840/mmcsd) compiled at 22:04:14, Sep 28 2015 Uncompressing kernel........................................................... ................................................................................ ................................done. Uncompressing ramdisk........................................................... ................................................................................ ................................................................................ (省略) ................................................................................ ................................................................................ ..........................................................done. rebooted by watchdog timedout. Hermit-At v3.7.0 (Armadillo-840/mmcsd) compiled at 22:04:14, Sep 28 2015 Uncompressing kernel........................................................... ................................................................................ ................................done. Uncompressing ramdisk........................................................... ................................................................................ (以下省略)
ソースダウンロードからの一連の手順をもう一度試して見ましたが,
症状に変化はありませんでした。
以上,宜しくお願い致します。
at_takashi.sasayama
s-hosoda
笹山様
お世話になっております。
> Armadillo-840 の JP2 が ショートしている為、SDカードのブートローダーから起動するようになっていますが、
> これは意図通りでしょうか?
> JP2にジャンパなどが接続されていましたら、それを外すことで改善されないかお試しいただけないでしょうか?
JP2 を ショートさせたままで,setenvコマンドにてフラッシュメモリ起動とSDカード起動を切り替えることができたため,
常にショートさせたままにしていました。
はずしてみましたが,状況に変化はありませんでした。
二度のmake menuconfigを行って,ただしソースの修正をしないで make したカーネルでは,起動させることが出来ました。
ブログに示して頂いている手順では,カーネルの make の際,以下のようなエラーが出てコンパイルが出来ませんでした。
・・・・ AS arch/arm/mach-shmobile/entry-intc.o CC arch/arm/mach-shmobile/pm-rmobile.o CC arch/arm/mach-shmobile/pm-r8a7740.o CC arch/arm/mach-shmobile/board-armadillo840.o arch/arm/mach-shmobile/board-armadillo840.c:2188:2: error: ‘SZ_50M’ undeclared here (not in a function) make[2]: *** [arch/arm/mach-shmobile/board-armadillo840.o] エラー 1 make[1]: *** [arch/arm/mach-shmobile] エラー 2 make[1]: ディレクトリ `/home/atmark/part/linux-3.4-at17' から出ます make: *** [linux] エラー 1 atmark@atde5:~/part/atmark-dist$
しかし,linux-3.xに移動してmake menuconfigを実行して make するといろいろ聞いてくるようになるので,
全てそのままデフォルトでリターンして,make をしていました。
よく確かめると,修正したソースのコンパイルはされていないので,make が通るようになっただけの様子です。
笹山様が確認された際は,上記のコンパイルエラーは発生しなかったでしょうか。
以上,よろしくお願い致します。
at_takashi.sasayama
笹山です。
> arch/arm/mach-shmobile/board-armadillo840.c:2188:2: error: ‘SZ_50M’ undeclared here (not in a function)
上記コンパイルエラーですが、当方の環境でも発生しました。
これは SZ_50M という定義が存在しないというエラーでしたので、定義が存在する SZ_64M などに読み替えていました。
SZ_50M 相当に設定されたい場合は、 0x03200000 と記述してください。
> しかし,linux-3.xに移動してmake menuconfigを実行して make するといろいろ聞いてくるようになるので,
> 全てそのままデフォルトでリターンして,make をしていました。
当初は atmark-dist 配下ではなく、atmark-dist/linux-3.x 配下で make を実行されていたという意味でしょうか?
その場合ですと、 コンフィギュレーションと、ARCH 環境変数を適切に設定しないと、Armadillo で起動可能なイメージが作成されません。
マニュアルに記載されています atmark-dist 配下での make をお勧めします。
Armadillo-840 製品マニュアル: 11.1. Linuxカーネル/ユーザーランドをビルドする
http://manual.atmark-techno.com/armadillo-840/armadillo-840_product_man…
at_takuya.sasaki
ブログを書いた佐々木です。
> arch/arm/mach-shmobile/board-armadillo840.c:2188:2: error: ‘SZ_50M’ undeclared here (not in a function)
こちらの件、大変失礼しました。
ご指摘の通り、SZ_50Mの定義をヘッダファイルに追加する手順が漏れていたので、コンパイルエラーになります。
回避策としては、linux-3.4-at17/include/asm-generic/sizes.h にSZ_50Mを追加するか、先のレスのように
以下のようにサイズを直接指定する必要があります。
MTD_PART("userland", MTDPART_OFS_APPEND, 0x3200000),
ブログは、上記の直接サイズ指定に直しておきました。
大変失礼をいたしました。
以上です。
s-hosoda
at_takashi.sasayama
2016年8月25日 15時35分
笹山です。
> 以下2点教えて頂けないでしょうか。
> ①メモリマップの違いをどのように反映されば良いでしょうか。
Armadillo-810 と, Armadillo-840ではフラッシュメモリのサイズが異なります。
Armadillo-810 は 64MB, Armadillo-840 は 128MB です。
今回ご参照されている、ブログの内容においては、userland のサイズ指定時に考慮する必要があります。
例として、ブログの内容通り application を 5.25MB のサイズで作成する場合は、
以下の様なメモリマップになります。(userland以降のサイズが異なります)
> ②起動時に何がまずいのかを,確認する方法はあるでしょうか。
ブログの内容通りに試してみましたが、Armadillo-840でも正常にカーネルが起動しました。
エラーログを拝見させていただきたいのですが、添付していただくことは可能でしょうか?
何かわかることがあるかもしれません。
また、以下の点をチェックしてみてください。
1. ブートローダーのコンフィグはArmadillo-840用でしょうか?
ブログ内容では、以下の様にコンフィグ、ビルドを行っていますが、
Armadillo-840用には、以下の様に読み替える必要があります。
2. 間違えて、Armadillo-810用のカーネルイメージを書き込んでいないでしょうか?
その際は、以下の様なエラーログが出力されます。