投稿

git@よく使うコマンド早見表

git@よく使うコマンド早見表 gitでよく使うコマンドをまとめる。 add コマンド 説明 git add . ワークディレクトリ配下全てのファイルをステージ(インデックスに記録)する git add <ファイル> 指定したファイルをステージ(インデックスに記録)する git add -u ワークツリー内でバージョン管理中の全てのファイルをステージ(インデックスに記録)する branch コマンド 説明 git branch ローカルブランチのリストを表示する git branch -r リモートブランチのリストを表示する git branch -a ローカルブランチとリモートブランチのリストを表示する git branch <ブランチ名> 指定したブランチを作成する git branch -d <ブランチ名> 指定したブランチを削除する checkout コマンド 説明 git checkout <ブランチ名> 指定したブランチに移動する git checkout -b <ブランチ名> 新しくブランチを作成してそのブランチに移動する clone コマンド 説明 git clone <リポジトリアドレス> リポジトリアドレスからクローンする git clone --recursive <リポジトリアドレス> リポジトリ内のサブモジュールもクローンする commit コマンド 説明 git commit コミットする(コミットログを編集するエディタが起動する) git commit -m <コミットログ> 指定したコミットログでコミットする git commit -a git add -uとgit commitを連続して実行する config コマンド 説明 git config --list 設定を確認する git config --global core.editor ...

MochiOS開発記@突然のTripleFaultの原因判明!

イメージ
 デバッグログ強化を進めたお陰でタイトルの通り原因判明に至った。 以下、なりゆき。 (1) デバッグログをメモリ上にも吐き出すように機能追加 (2) TripleFaultを再現させるも、吐き出したメモリ上のログが破壊されていることに気づく (3) GDB繋いでログメモリ先頭アドレスにwatchpoint設定して監視するも、引っ掛からない  ⇒つまり、別の仮想アドレスからメモリ破壊していることに気づく (4) ページマッピング箇所にトレースログを仕込み (5) どんどんページに割り当ててる物理アドレスが加算されていることに気づく  ⇒つまり、メモリリーク (6) 怪しい所にどんどんトレースログ追加していき原因判明 直接的原因1:  プロセスのヒープ領域を縮小する時に、ページマッピング解除は行っているが、割り当てている物理メモリを解放していなかった。 直接的原因2:  普通に設計上固定的に使っている物理メモリ領域をカーネルの物理メモリ管理くんが未使用と認識していて、割当てを行っていた。 直接的原因1の動機的原因(根本)は、後で実装すればいいや精神でテキトーに実装したからだな・・・。ページマッピング解除時に関数のインタフェース仕様が理由で割り当てていた物理メモリアドレスがわからないから解放ができず、割と大がかりな構成変更が必要だったから後回しにしていたようだ。なんにも残してない自分が悪いね。個人開発でもTODO管理やチケット管理ってやっぱ必要だと思う。うん。 直接的原因2のほうは・・・なんでだろうね。どう考えていたか覚えていない。 あー超スッキリした!メモリマネージャ大改造しよ。これが当面の目標。

MochiOS開発記@デバッグログ強化検討

 MochiKernelのデバッグログは下記情報を持っている。 ・ログ出力したモジュール-サブモジュール(つまりひとつのソースファイル)のID ・ログ出力した行数 ・文字列 デバッグログ種別やレベルなどは持たせていなくて、好き勝手していた。 いざ不具合があると情報が足りなくなるし、不具合がないと不要なログで埋め尽くされて見たいものが見れなくなる、ということに悩まされてきたので、種別の概念を追加することにする。 大体、世の中のシステムログ種別は以下のような感じか(超適当) 種別 概要 emergency システムが使用できなくなった系 alert 対処しないとまずい系 critical 致命的で対処しようがない系 error エラー全般 warning 警告全般 notice エラーでも警告でもないがちょっとあやしい系 informational なんか処理したよ系 debug プログラムデバッグ情報系 参考にしてこんな感じにしよう。(全然参考にしてない) 種別 概要 abort あぼーと。もう何もできない。死んだ。 error 想定外のエラー。処理を続けられないので中断。 warning 想定内のエラー。処理を続けられないので中断。 info なんか処理した。頻度低(HW割込みとかタスクスイッチ系はダメ)。 trace コードここ通ったよ。頻度低(HW割込みとかタスクスイッチ系はダメ)。 temp デバッグ中に使う専用。残さない。 種別ごとに有効化マクロ定義しとこ。

MochiOS開発記@当面の目標

イメージ
突然のフリーズ。 カーネルログを見ても解析困難。 というわけで、このバグ修正を当面の目標にしよう。 INT14なのでページフォルトなのだけど、誰かがメモリ破壊してる気がするなぁ。。。 とりあえず、カーネルログのレベル実装してもうちょい情報増やしてみよう。

CUnit@単体テストはじめ

CUnit@単体テストはじめ はじめに 自作kernel作るにあたってDebug機能が欲しくなり。 snprintfが必要となり。 やっぱlibc欲しいなとlibcを作り始め(newlib使ってもよかったんだけど、自作楽しいので)。 snprintfを作ったのだが、これ動くのか?と。 単純に作業量2倍になるので、趣味でテスト系は避けてきたのだけど、やっぱ避けて通れないよねテスト。 というわけで、CUnit使うか・・・の備忘録。 ライブラリインストール sudo apt-get install libcunit1-dev テスト対象コード例(target.c) int target_func ( void ) { return 5 ; } テストコード例 # include <CUnit/CUnit.h> # include <CUnit/Basic.h> # include "target.c" void test_func_1 ( void ) { ret = target_func ( ) ; CU_ASSERT_EQUAL ( ret , 5 ) ; } int main ( void ) { CU_pSuite suite ; /* テストレジストリ初期化 */ CU_initialize_registry ( ) ; /* テストスイート追加 */ suite = CU_add_suite ( "TestSuite" , NULL , NULL ) ; /* テスト追加 */ CU_add_test ( suite , "test1" , test_func_1 ) ; /* テスト実行 */ CU_basic_set_mode ( CU_BRM_VERBOSE ) ; CU_basic_run_tests ( ) ; /* テストレジストリ削除 */ CU_cleanum_registry ( ) ; return 0...

linux@VPN構築

linux@VPN構築 はじめに 在宅勤務になってから、ほぼ外出することが無くなり、外出先から自宅ネットワークに繋ぐことも無くなっていた。久しぶりに繋いでみたら、繋がらない。どうやら使っていたDDNSサービス(ieserver)が終了したらしく、他にも色々と理由があってダメだったので、見直すことにした。 ネットワーク構成は下記の通り。 My home My Device Rooter VPN server VPN Client INTERNET DDNS VPN serverは、Debian GNU/Linux 9 (stretch) VPNClientは、WindowsだったりAndroidだったり。 ドメイン名設定 私の自宅インターネット接続環境は固定IPアドレスではなく、再接続なんかの度にコロコロIPアドレスが変わるので、外出先からはvpn.mochi.cоm(仮)みたいなドメイン名を使ったアクセスをできるようにする必要がある。 これは、どこかのDDNSサービスを使ってドメイン名を取得し、自宅サーバから定期的に自分のグローバルIPアドレスを更新してあげることで実現できる。 DDNSサービスの選択 今回、適当に検索して色々出てくるなか、下記サービスを使うことにした。 DDNS Now 簡単に説明すると、 無料 ホスト名: アカウント名.f5.si  ※siはスロベニアらしい Aレコード設定可 AAAAレコード設定可 TXTレコード設定可 こんな素晴らしいサービスを無料で提供して頂けることに感謝。 そして、もともと使っていたieserver並みにシンプルに使える。 crondでIPを自動更新する 自宅のIPアドレスはインターネット再接続の度に変わってしまい、その都度手動でDDNSサービスに再登録するのは面倒な上に、外出先からはIPアドレスが判らず再登録できないので、VPNサーバを使って自動的にIPをDDNSサービスに再登録する様にする。 crontabを開く crontab -e 10分毎に実行するコマンドを追加する 0,10,20,30,40,50 * * * * wget -O DDNSNow_update.log "https://f5.s...

github@パスワード認証でpushできなくなった

github@パスワード認証でpushできなくなった はじめに 最近、漸くコードをイジれて、久しぶりにgithubにpushしようとしたのだが、 $ git push origin develop Username for 'https://github.com': MasterMochi Password for 'https://MasterMochi@github.com': remote: Support for password authentication was removed on August 13, 2021. Please use a personal access token instead. remote: Please see https://github.blog/2020-12-15-token-authentication-requirements-for-git-operations/ for more information. fatal: Authentication failed for 'https://github.com/MasterMochi/mvfs.git/' あれ、pushできな~い。なになに・・・ パスワード認証のサポートは2021年8月13日に削除されました~。 代わりにパーソナルアクセストークンを使ってくれ~ そういえば、以前pushした時にそんな警告が出ていた気がする。承認方法変わったのか。 8月ってダイブ前だな・・・ 誘導されたページを見てみる https://github.blog/2020-12-15-token-authentication-requirements-for-git-operations/ 前置きはすっ飛ばして、"What you need to today"をテキトーに読むと、 今日すべきこと 開発者さんのために、もしGitHub.comでGit操作を承認するためにパスワード使ってんなら、HTTPS (推奨)かSSH鍵を介した パーソナルアクセストークン を使わなきゃダメよ。 うん、で?と思ったら、「パーソナルアクセストークン」...