ラベル Linux の投稿を表示しています。 すべての投稿を表示
ラベル Linux の投稿を表示しています。 すべての投稿を表示

2023年4月28日金曜日

[Linux][ドライバ]inodeの意味がやっと分かった

どうもこんにちは


今日もソフトウェアについてほのぼのと記載します。


現在は、以下の書籍を読んでいます。


・Linuxデバイスドライバプログラミング


10日ほどで140ページまで進みました。

約600ページあるのでまだまだです。

(技術書というのは速読できないものなのでしょうか。。。)


サンプルソースがしっかりとあるのはよいですね。


さて、ドライバソースを見ていてinodeというのがあり、よく分かっていなかったのですが、


本書を読み進めていくことで理解することが出来ました。


・inodeはメジャー番号とマイナー番号で構成されている。


・メジャー番号は、ドライバの種類を識別する番号

    spiドライバやら、tty(uart)のドライバ、i2cのドライバを識別するイメージです。


・マイナー番号は、1つのドライバ種類に設けられた識別番号

    ttyで言うと、CPUのピンにuartの機能が割り振られている。同じ機能のものが複数の端子についている。その識別番号です。

    →uart0,uart1のように識別出来る番号です。


出版された年が古いとはいえ、概念的なところではまだまだ使えそうです。

good


今回は以上です。

2022年10月20日木曜日

[linux][ディスク容量]Gparted使用したら起動しなくなった問題

こんにちは


今日もほのぼのとソフトウェアについて


記載していきたいと思います。


Vmware Player Ubuntu14_04上で作業していたところ、


仮想ディスク容量が足りなくなってしまいました。。


そのため、Vmware Playerの仮想マシン設定から


ハードディスクを追加で200GB増やして


パーティションを増やすように試してみました。


一度バックアップをとった後、


Gparted アプリを使ってパーティションを


変更して、再起動を行ってみました。

(バックアップは必須です。)


・・・

起動してきませんでした。


(パスワード入力まではいくのですが、その後数時間経過してもデスクトップ画面になりませんでした。)


試行錯誤して、結果的に以下を行うことで


現象は解消出来ました。


1.Gparted アプリで、使用しているパーティション以外を削除する。

(私の環境だと、”/dev/sda1”だけ使用して直後にSWAP用のメモリがあったので、それを削除)


2.使用しているパーティションをリサイズして増やす。”/dev/sda1”だけパーティションとしては有効な状態。


3.Vmware Playerの仮想マシン設定からハードディスク→”デフラグ”を実行

(これは試しにやってみただけで、もしかしたら不要かもしれません)


以上です。


ハードディスクは仮想環境を作成する時点で300GBくらいを設定しておいた方が良いです。

かなりハマりました。


<a href="https://px.a8.net/svt/ejp?a8mat=3HE3NL+M125U+3L4M+6PZF5" rel="nofollow">

<img border="0" width="300" height="250" alt="" src="https://www22.a8.net/svt/bgt?aid=210609921037&wid=001&eno=01&mid=s00000016735001129000&mc=1"></a>

<img border="0" width="1" height="1" src="https://www10.a8.net/0.gif?a8mat=3HE3NL+M125U+3L4M+6PZF5" alt="">

<br>


<a href="https://rpx.a8.net/svt/ejp?a8mat=3HE0IY+3DGG6Q+2HOM+699KH&rakuten=y&a8ejpredirect=http%3A%2F%2Fhb.afl.rakuten.co.jp%2Fhgc%2F0ea62065.34400275.0ea62066.204f04c0%2Fa21060505431_3HE0IY_3DGG6Q_2HOM_699KH%3Fpc%3Dhttp%253A%252F%252Fwww.rakuten.co.jp%252F%26m%3Dhttp%253A%252F%252Fm.rakuten.co.jp%252F" rel="nofollow">

<img src="http://hbb.afl.rakuten.co.jp/hsb/0eb4bbc5.1222aa2a.0eb4bbaa.95151395/" border="0"></a>

<img border="0" width="1" height="1" src="https://www11.a8.net/0.gif?a8mat=3HE0IY+3DGG6Q+2HOM+699KH" alt="">

<br>


2022年10月17日月曜日

[Yocto] NetworkManagerの開始

こんにちは、今日もソフトウェアについてほのぼのと記載します。


現在、NetworkManagerが起動できなくて


困っていました。


Service NetworkManager Start


のコマンドを実行すれば出来るようなことが


記載されているページがあったのですが、


Yoctoプロジェクトで生成された組み込みLinuxの場合、


Error: NetworkManager is not found


と出てコマンド自体見つからないと怒られました。


結果として、以下のコマンドで実行できました。


NetworkManager Start

コンフィグファイルが見つからないような応答メッセージが出てきても実行は完了しています

(ハマってしまいました。)


NetworkManager設定は以下を参考にしていくと良いと思います。


NetworkManager Cliでネットワークを設定する方法

http://www.maruko2.com/mw/NetworkManager_CLI_(nmcli)_%E3%81%A7%E3%83%8D%E3%83%83%E3%83%88%E3%83%AF%E3%83%BC%E3%82%AF%E3%82%92%E8%A8%AD%E5%AE%9A%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95


また、NetworkmManagerは、以下が参考になります。


2022年10月11日火曜日

[yocto] IMAGE_INSTALL_appendとIMAGE_INSTALLの違い

こんにちは、今日もソフトウェアについてほのぼのと記載します。

現在、yoctoプロジェクトを使用して

ユーザボードに組み込むlinux ドライバ周りのソフトを作成しています。

rootfsを以下のコマンドで作るのですが、


bitbake core-image-base


local.confファイルに

IMAGE_INSTALL+=” ifmetric”

など入れていると、ユーザボード起動で

lsやらfindやらが使えなくなってしまいました。

binディレクトリ内にもコマンドファイルはなく、確かに動かない状態です。

その指定による動作としては、コマンド類を一度削除してから、自分用に入れていくような動きになりました。

この現象を解消する方法を色々調べたところ、

IMAGE_INSTALL_append+= “ コマンド”

を指定すれば、ベースのコマンド類に追加して

いくことが可能なようです。

yoctoは深いな。

次回から

“IMAGE_INSTALL_append”を使うようにしよう。

2022年3月2日水曜日

[yocto] local.confを変更した後に行うこと

こんにちは、針山散策を今日もほのぼのと行います。


今回、local.confを変更したのですが、

どういうわけか組み込みボードの方に

反映されませんでした。


いろいろ調べた結果、以下が分かりました。


build/conf/local.conf

IMAGE_INSTALL_append=” python3-requests”

を編集した後に、


bitbake core-image-base


を行えば、私の環境では更新されて

buldディレクトリ/tmp/deploy/images/cpu名


のところにあるbz2ファイルの日付が最新の状態に更新されました。


Yocto環境としては以下の通りです。

cpu: i.MX8MPlus

NXP社から提供されているyoctoプロジェクト

ベースにしているcomponent: core-image-base


今回の振り替えリまとめとしては以下です。


[まとめ]

i.MX_Yocto_Project_User’s_Guide.pdfの

5.3 Building an image

に書いている

bitbake <component>

をlocal.confを更新した後は、行いましょう。

rootfs自体が作り直されます。

2022年2月7日月曜日

[シェル] echoだけでシェルスクリプト作成

こんにちは、針山散策を今日もほのぼのと行います。

今回は、terminal(teraterm等)にテキストをコピーペーストするだけで

ターゲット上にシェルスクリプトを作成する方法について記載しようと思います。

組み込みLinuxで、シェルスクリプトをviコマンドで作成していくのも

良いのですが、以下のようにechoコマンドを使用することで

シェルスクリプトを作ることができ、

作業効率があがると思います。

以下、例です。

echo '' > tmp.sh
echo '#! /bin/sh -x' >> tmp.sh
echo '' >> tmp.sh
echo 'while :' >> tmp.sh
echo 'do' >> tmp.sh
echo 'echo "test"' >> tmp.sh
echo 'sleep 1' >> tmp.sh
echo 'done' >> tmp.sh

利点としては、以下2点があると思います。

1. Windows環境などのエディタで作成して
それをコピーペーストするだけでシェルスクリプトの作成が出来る
ということです。

2. 組み込みLinuxが動作しているボードが編集途中で再起動がかかってしまっても
問題ありません。

是非お試しください。

2020年2月12日水曜日

開発時の予期しない問題の予防1

こんにちは

ソフトな道をほのぼのと今日も歩きます。


今回は、開発している時に、やっておいたほうがよいことを記載します。


こちらを行うことで、認識していない不具合の遭遇をある程度予防できると

思います。


なぁんだ、そんなことか?と言った内容ですので、さらっと見るだけでもいいと思います。


------------------------------------------------------------------------------------------

1.条件文のその他の処理をどうするかを考えておく。


2.デバッグメッセージをソース内に組み込んでおきます。その際”#ifdef”で

表示/非表示切り替えが容易に行えるようにしておきます。

------------------------------------------------------------------------------------------



“1.条件文のその他の処理をどうするかを考えておく。”

こちらswitch文のdefaultの処理を作りましょうということです。if文の場合、elseでしょうか。

意外とこういうところから意味の分からない現象につながっていく危険性があります。


“2.デバッグメッセージをソース内に組み込んでおきます。その際”#ifdef”で

表示/非表示切り替えが容易に行えるようにしておきます。”

これは、デバッグ用メッセージを利用して、不具合の特定/対策などが早期にできるようにする私なりの工夫となります。

以下、一例です。

-----------------------------------------------------------------------------------------------

[test.c]

…

switch ( state& 0x7 ) {

case TEST_SENSOR_1:       

#ifdef DEBUG_TEST_MESSAGE

    printf("test sensor_1: 開始センサアクティブ (%s %d) \n", __FILE__, __LINE__);

#endif

…

[test.h]

…

#define   DEBUG_TEST_MESSAGE

…

-----------------------------------------------------------------------------------------------

test.cに#ifdef ”キーワード”としておき、

ヘッダファイル”test.h”にてキーワードを定義する/しないによって#ifdef内が

有効/無効になります。

こうしておくと、runして2二日後に原因不明なハングが発生といった

やっかいな不具合の調査時に役に立ちます。(絞り込みを行うことができます。)


今回は以上です。


[環境]

私の使用環境は VMware 上でUbuntu14.04を使用しています。

コンパイラ: arm-linux-gnueabihf-gcc


最近、東京は国際人が多くなりましたね。


新型コロナではないですが、本人は気づいていない(潜伏期間の人)が


他国の人(免疫の無い)に伝染病をうつしてしまう可能性がないか、


気になってしまいます。


いずれにしても、人混みは避けたほうが良さそうですね。



2020年2月6日木曜日

[Linux] サウンドがならない対応

こんにちは

ソフトな道をほのぼのと今日も歩きます。


Linuxにおけるアプリ開発をしています。


今回は、音が鳴らないという現象が発生しました。


ALSAを使用しての音声出力を行っています。


音ファイルはRIFF形式のものですが、


このファイルは一体どんな設定なんだろう。。


ということで調べてみたところ、以下のサイトが大変わかりやすかったです。


https://taku-o.hatenablog.jp/entry/20181120/1542726865


私が使用しているファイルをエディタでバイナリで開いてみて


リンク先内容と照らし合わせて書き出してみました。


---------------------------------------------

bits_per_sample : 16bits

num channels: 1チャネル(モノラル)

サンプリングレート: 22050

byte rate: ブロックサイズは44100

---------------------------------------------


この設定で音が鳴るはず。。と思っていたのですが、


まだ動作しませんでした。


調べてみたところ、バッファはmallocを使って行っていましたが、


これを以下のように、2バイトバス幅に設定した静的バッファに


したところ音が鳴りだしました。



static short buff[0x1000];



推測ですが、bits_per_sampleが16bitなので、アライメントがそれにあう


short型でメモリ確保しておかないとだめなのかもしれません。

そして、音が鳴るようになったところで、ターミナル(teraterm)をみたら、


なにやら、以下の表示がされていました。


“ALSA lib pcm.c:8432:(snd_pcm_recover) underrun occurred”


調べてみたところ、以下が参考になりました。


https://tutorialmore.com/questions-174806.htm


確かに、”snd_pcm_writei();”を連続して呼び出す際にウェイトを入れてあげると


上記”underrun ”は発生しなくなりました。


ウェイトを入れるのは美しくないので、それに代わる何かを探してみました。


そしてありました。



snd_pcm_set_params();のレイテンシの設定を変更してあげる。



こちらを行うことで、上記”underrun”の現象はなくなりました。


以上です。


[環境]

私の使用環境は VMware 上でUbuntu14.04を使用しています。

コンパイラ: arm-linux-gnueabihf-gcc


新型コロナウィルスが発生していますが、なんとか乗り切りましょう。


(マスクが少ないから、石鹸でよく洗って再度使うしかない状態です。


フリマの一部の人たちに買い占められて、高値を払うか、それとも死を選ぶかの


究極的選択になっていますが、私は買わないで使いまわす選択肢を選びます!


その分、武漢へ空からマスクを降らせましょう。)