2

これは私の最初の投稿であり、約 1 年間取り組んだりやめたりしようとしてきたことをカバーしています。

基本的には、次のように要約されます: LPC2388 (NXP の ARM7TDMI) で動作させようとしている newlib のコピーがあります。これは、arm-elf-gcc を使用する Linux ボックス上にあります。

私が持っている質問は、newlib の移植について話している多くのチュートリアルを見てきたということです。それらはすべてスタブ (exit、open、read/write、sbrk など) について話しているので、かなり良い考えを持っています。これらすべての機能を実装する方法。しかし、どこに置くべきですか?

私は、sources.redhat.com/pub/newlib/newlib-1.18.0.tar.gz から newlib ディストリビューションを入手しました。 arm) には、更新する必要があるすべてのスタブが含まれていますが、それらはすべてかなり完成した外観のコードで埋められています (これは、crt0.S なしでは機能しないようで、それ自体は私のチップでは機能しません)。

これらの関数を自分で一掃して、書き直すべきですか?それとも別の場所に書くべきですか?「アーキテクチャ」の名前で newlib/libc/sys にまったく新しいフォルダーを作成し、ターゲットを一致するように変更する必要がありますか?

このようなものをオープンソースプロジェクトとしてリリースした後、配布する際の適切なエチケットがあるかどうかも興味があります。現在、binutils、arm-elf-gcc、newlib、および gdb をダウンロードしてコンパイルするスクリプトがあります。newlib ディレクトリにあるファイルを変更する場合、スクリプトが自動適用するパッチを渡す必要がありますか? または、変更した newlib をリポジトリに追加する必要がありますか?

わざわざ読んでくれてありがとう!これに続いて、私がやっていることのより詳細な内訳があります。


私のセットアップに関する詳細情報が必要な人のために:

Uzebox プロジェクト ( http://belogic.com/uzebox/ )に大まかに基づいて、ARM ビデオゲーム コンソールを構築しています。

私はそれを理解しようとして、多くの異なるリソースから引き出してあらゆる種類のことをしてきました. ここで私の冒険の始まりについて読むことができます (sparkfun フォーラム、私が自分でそれを理解するので、誰も応答しません): forum.sparkfun.com/viewtopic.php?f=11&t=22072

私は、これらすべてに続いて、newlib の移植に関する Stackoverflow の質問を読み、さまざまなチュートリアル ( wiki.osdev.org/Porting_Newlib など) をいくつか見ましたが、どこに、誰が、何を、いつ、どのように!

4

2 に答える 2

7

しかし、どこに置くべきですか?

それらが最終リンクに存在する限り、好きな場所に配置できます。それらを libc ライブラリ自体に組み込むことも、その汎用性を維持して、syscall を個別のターゲット固有のオブジェクト ファイルまたはライブラリとして持つこともできます。

独自のターゲット固有の crt0.s を作成し、それをターゲット用にアセンブルしてリンクする必要がある場合があります。

GNU/ARM 開発の立ち上げと実行に関する Quantum Leaps の Miro Samek による優れたチュートリアルは、こちらから入手できます。サンプルは Atmel AT91 パーツに基づいているため、スタートアップ コードを適応させるには、NXP デバイスについて少し知っておく必要があります。

LPC2xxx 用の既製の Newlib 移植層はここ入手できましたが、ファイルのリンクが壊れているようです。同じ移植層が、Martin Thomas のWinARMプロジェクトで使用されています。これは GNU ARM GCC の Windows ポートですが、含まれている例はホスト固有ではなくターゲット固有です。

Newlib の移植レイヤーを変更するだけで済みます。これはターゲットアプリケーション固有であるため、プロジェクトにコードを送信する必要はありません (実際には送信すべきではありません)。

于 2011-01-12T19:05:28.877 に答える
2

私が行ったこととまったく同じnewlibを使用していたとき、crt0.s、syscalls.c、およびlibcfunc.cを吹き飛ばしました。私の個人的な好みは、組み込みアプリケーションに基づいて、crt0.sとsyscalls.cの置換(libcfuncのいくつかの関数をsyscalls.cの置換にロールイン)にリンクすることでした。

私はその作品をディストロに戻すことに興味がなかったので、そこであなたを助けることはできません。

あなたは正しい道を進んでいますが、crt0.Sとsyscalls.cは、ターゲットに合わせてカスタマイズするために作業したい場所です。個人的に私はCライブラリ(およびprintf)に興味があり、主にすべての関数をニュートラルにして0または1を返すか、関数を正常に動作させてリンクの邪魔にならないようにするために必要なものは何でも、定期的にファイルを作成します。 / O関数は、rom/ram内のリンクされたデータで動作します。基本的に、newlib内の他のファイルを置き換えたり変更したりすることなく、私はかなりの成功を収めたので、あなたは正しい道を進んでいます。

于 2011-01-12T05:02:56.027 に答える