問題タブ [uclinux]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - uClinux での動的割り当て
私は組み込み開発の初心者であり、従来の Linux と uClinux の大きな違いは、uClinux には MMU がないことです。
この記事から:
VM を使用しない場合、各プロセスは実行可能なメモリ内の場所に配置する必要があります。最も単純なケースでは、このメモリ領域は連続している必要があります。通常、その上下に他のプロセスがある可能性があるため、拡張することはできません。つまり、uClinux のプロセスは、従来の Linux プロセスのように、実行時に使用可能なメモリのサイズを増やすことができません。
私には、これはすべてのデータがスタックに存在する必要があるように聞こえます。そのヒープ割り当ては不可能です。つまり、malloc() や "new" は問題外です...それは正確ですか? おそらく、「静的ヒープ」(つまり、「動的」割り当てを要求できるスタックベースの領域)を管理できる手法/ライブラリがありますか?
それとも私はそれを考えすぎていますか?それとも単純化しすぎ?
linux-kernel - リンカ スクリプトがメモリを浪費する
ここに私の問題があります。標準の arm7nommu-uClinux カーネルをリンクする次のリンカー スクリプトがあります。
私のハードウェア シミュレータのメモリ アーキテクチャは、1 つの sdram と 1 つのフラッシュ メモリで構成されています。コードのセクションを分割し、(たとえば) .text セクションをフラッシュに、.data セクションを特定のアドレスの sdram に配置したいと考えています。そのために、リンカー スクリプトを次のように変更しました。
すべてのセクションが必要な場所にマップされているため、正常に動作しますが、通常の出力ファイル (前のリンカー スクリプトとリンク) が約 800Kb の場合、出力ファイルは約 429Mb です!...なぜですか? 私を助けてください!
前もって感謝します。
c - このioctlでaccess_okが失敗するのはなぜですか
編集:なぜここで失敗するのかについては、まだ良い答えがありません...それで、これを少し言い換えさせてください。verify_area()チェックも必要ですか?そのポイントは何ですか?構造がこのioctlに正常に渡されるという事実をテストしました。失敗したチェックを削除することを考えていますが、100%実行できるわけではありません。考え? 編集終了
私はいくつかの古いLinuxカーネルドライバーを更新するために働いています、そしてそれをテストしている間、私は私には奇妙に思われる失敗を経験しています。どうぞ:
ユーザースペースで単純なioctl呼び出しがあります。
Config_par_tはcan4linux.hファイルで定義されています(これはuCLinuxに付属のCANドライバーです)。
カーネル側では、ioctl関数はverify_areaを呼び出します。これは、失敗したプロシージャです。
これで、verify_area()が使用されなくなったことがわかったので、このマクロを使用してヘッダーファイルでaccess_okに更新しました。
私はx86プラットフォームを使用しているので、呼び出される実際のaccess_ok()マクロは、ここで定義されている/usr/src/linux/arch/x86/include/asm/uaccess.hにあるマクロであると確信しています。
私には、これは機能しているように見えると思います。チェックすると、このverify_areaから1リターンが返される理由はありますか?または、問題を絞り込む方法についてのアイデアはありますか?
c - 完全に再起動しないCGIからスクリプトを再起動するための呼び出し
Cで記述されたCGIスクリプト内からBoaWebサーバーを再起動しようとしています。これはucLinuxシステム上にあります。system( "/etc/init.d/boa.sh restart")の呼び出しは正常に実行され、ログからBoaが停止していることがわかりますが、開始されていません。CLIからboa.shrestartを実行しても問題なく動作します。boa.shスクリプトを以下に示します。完全に再起動しない理由について何かアイデアはありますか?CGIスクリプト自体がBoa内で実行されていることに注意してください。
gdb - 奇妙なgdbserver出力がターゲットデバイスに表示されます
uclinuxターゲットデバイスでgdbserverを実行するとblackfinbfin537/ stemは完全に機能しますが、常に迷惑な出力を生成します不明なレジスタを取得する要求232不明なレジスタを取得する要求236
gdbクライアントの各ステップアウトまたはステップで出力画面ターミナルRS232にそのエラーがいくつか発生するため、非常に煩わしいです。bfinコンパイラのバージョンを変更し、異なるバージョンのuclinuxでgdbサーバーを再構築することをお勧めします。動作し、異なるバージョンのbfin-uclinux-gccでコードをコンパイルしても、問題は解決しませんでした。
gdbserver.cを再コンパイルして、エラーを生成する行を削除することにしましたが、実際には、その行はコンパイル用のgdbserver関連ファイルのいずれにも存在しません。
gdbserver:3298 process 1> / dev / null 2> / dev / nullを実行してgdbサーバーのstderr出力を抑制することにしましたが、これでは解決しませんでした。特定のレジスタを要求するようにgdbクライアントを構成するにはどうすればよいですか(bfin- uclinux-gdb)bfin537-stampに関連していますか?
このエラーは、uclinuxシステムのバックグラウンドシステムプロセスのどこかで発生していると思います。どのプロセスがstderr、stdoutに書き込み、それを認識していないかを見つけたいのですが、その出力を抑制したいですか?
すべてのstderr出力を削除するためにbusyboxシェルまたは/bin/ bashの何かを変更しますか?つまり、すべての親シェル出力またはstderrを/ dev/nullに送信する場合
fpga - uClinux で SD カードとイーサネットをインストールする方法
uCLinux を Altera DE2-115 (FPGA BOARD) にインストールしました。ターミナルにフル アクセスできます。
IP と eth0 の MASK を設定したいのですが、「ifconfig」を実行すると、次のように表示されます。
eth0 または eth1 はなく、2 つのイーサネット ポートがあり、eth0 にはイーサネット ケーブルが差し込まれています (インターネットと LAN ネットワークで完全に動作します)。
なぜ eth0 または eth1 がないのですか?
また:SDカードドライブをマウントしたいときは、次のようにします:
そして私は得る:
SDカードデバイスがなかったかのように...私のdevフォルダーには次のものがあります:
また、SDカードドライブはFAT16をサポートしており、それが私のSDカードで現在使用しているファイルシステムです。
イーサネット「eth0」および/または「eth1」、および SD カードにアクセスできるようにするにはどうすればよいですか?
embedded - Initrd、Ramdisk、Initramfs、uclinux
私は、coldfire ボード M5272C3 での uclinux の移植に取り組んでいます。現在、rootfile システムとして romfs を使用して RAM からカーネルを実行しています。いくつかの用語について、それらが何を意味し、いつ使用するのかが明確ではありません....
できるだけ簡単に説明してください:
Q1: initrd とは何ですか? なぜそれが必要なのですか?
Q2: RAM ディスクとは何ですか? なぜ、どこでこれが必要なのですか?
Q3: initramfs とは何ですか? なぜ、どこでこれを使用するのですか?
Q4: ramfs とは何ですか? なぜ、どこでこれを使用するのですか?
また、これらの用語の詳細については、ドキュメント/参考書を参照してください....
ありがとうフォガット
c - pthread_mutex_lock でスレッドが停止し、SIGILL シグナルが発生しました
組み込み Linux OS (uclinux、mips CPU) でプロジェクトを開発していますが、ときどきクラッシュしました。gdb でコアダンプを確認しようとすると、SIGILL シグナルを受信したことがわかります。
時々、pthread_mutex_lock で停止したことを示すバックトレースを見ることができます。しかし、ほとんどの場合、バックトレースは有効ではありません。
有効なバックトレース
無効なバックトレース
pthread_attr_setstackaddr を使用して各スレッドのスタックを初期化し、スタックをチェックして呼び出しフレームを確認できるようにしました。また、pthread_mutex_lock で停止していることがわかりました。
ロックとロック解除にラッパーを使用しました
これらのミューテックスはすべて、使用する前に開始されます。
プログラムを実行するために gdb を試しましたが、停止しませんでした。
私は単純なプログラムを書きました。11 個のスレッドは、デッド ループでロックおよびロック解除するだけで、バグは何もしません。死ななかった。
何か提案はありますか?
c - Linux カーネルを使用した組み込みシステムの C - 不思議な ADC 読み取りの問題
uClinux を実行している AD Blackfin BF537 DSP で開発しています。合計 32MB の SD-RAM が利用可能です。への単純なブロッキング呼び出しを使用してアクセスできる ADC が接続されていread()
ます。
私のコードの最も興味深い部分は以下です。プログラムを実行すると問題なく動作するようです。SD カードからフェッチしてプロットできる素敵なデータ パッケージを取得します。ただし、float 計算部分をコメント アウトすると (コードに示されているように)、ft_all.raw ファイルでゼロしか得られません。最適化レベルを -O3 から -O0 に変更すると、同じことが起こります。
私はあらゆる種類のものの無数の組み合わせを試しましたが、うまくいくこともあれば、うまくいかないこともあります.以前は(以下に少し変更を加えると)、コードは最適化が無効になっている場合にのみ機能しました. ファイルのさらに下に何かを追加すると、壊れることもあります。
私の疑いは、関数によって転送されたデータがread()
完全に転送されていない可能性があることです (正しいバイト数が返されたとしても、それは可能ですか?)。直接メモリアドレスを使用してポインタを初期化するのもこれが初めてであり、コンパイラがこれにどのように反応するかわかりません。おそらく、ここで何かを見逃したのでしょうか?
私は今、この問題に何日も費やしてきましたが、必死になっています - この問題について助けていただければ幸いです! 前もって感謝します。
編集: read() を使用して ADC ではなく単純なファイルからデータを読み取ると、コードは完全に機能するようです。これにより、入力の I 部分と Q 部分を抽出するときのややハッキーなコードが意図したとおりに機能していると思われます。コンパイラによって生成されたアセンブリを調べると、これが確認されます。
ADC ドライバーの開発者に連絡して、この動作について説明があるかどうかを確認しようとしています。
ADC は SPORT を介して接続され、次のように開かれます。
SPORT の設定時に使用するオプションは次のとおりです。
Analog Devices の bfin_sport.h ファイルも含まれています: https://gist.github.com/tausen/5516954
更新 プロジェクトの前の開発者との長い夜のデバッグの後、問題は上記のコードとはまったく関係がないことが判明しました。Chris が示唆したように、実際には SPORT ドライバーと ADC 構成の問題でした。
デバッグ中に、データが「壊れた」場合は常に次のエラー メッセージが表示されましたbfin_sport: sport ffc00900 status error: TUVF
。これはアプリケーションではあまり意味がありませんが、データの出力から何かが同期していないことは明らかでした:ステータス エラーが表示されるたびに0x12000000,0x34000000,...
ではなく、バッファー内のデータがフォーム上にありました。0x00000012,0x00000034,...
buf16I と buf16Q にゼロしか含まれていない理由は明らかです (12 個の LSB を抽出しているため)。
ADCの初期化と構成の段階の間にいくつかの呼び出しを入れるusleep()
と、問題が解決したようです-私はそれがそのままであることを望んでいます!