投稿

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

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

git@よく使うコマンド早見表 gitでよく使うコマンドをまとめる。 add コマンド 説明 git add . ワークディレクトリ配下全てのファイルをステージ(インデックスに記録)する git add <ファイル> 指定したファイルをステージ(インデックスに記録)する git add -u ワークツリー内でバージョン管理中の全てのファイルをステージ(インデックスに記録)する branch コマンド 説明 git branch ブランチのリストを表示する git branch -d <ブランチ名> 指定したブランチを削除する checkout コマンド 説明 git checkout <ブランチ名> 指定したブランチをチェックアウトする 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 vim エディタをvimに設定する git config --global diff.tool vimdiff diffをvimで見るように設定する diff コマンド 説明 git diff ワークツリーとインデックス間のファイル差分を表示する git diff HEAD ワークツリーと最新のコミット間のファイ

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鍵を介した パーソナルアクセストークン を使わなきゃダメよ。 うん、で?と思ったら、「パーソナルアクセストークン」

MochiOS@仮想ファイルシステムの作成part10

イメージ
MochiOS@仮想ファイルシステムの作成part10 前提知識無しで作るなんちゃって仮想ファイルシステムpart10。 開発日記です。独り言です。 これまでのあらすじ part 内容 0 仮想ファイルシステムを作りたい宣言をする。 1 ざっくり仮想ファイルシステムの機能を決める。 が、機能呼出し先の仮想ファイルシステムのタスクIDをどう取得するかという問題に気付く。 2 カーネルにタスク名登録機能を実装した。 これでタスク名からタスクIDを取得する事が出来る様になるハズ、なので試したいが試す方法が無い事に気付き、ログ出力タスクの開発を宣言する。 3 ログ出力の為に使うvsnprintf()の仕様を調べる。 4 ログ出力タスクを開発してタスク名からタスクIDの取得機能が正しく動いている事が確認できた。 5 mount機能を実装した。たぶんできてる。 6 FDどうやって管理しようかー。メッセージのやり取り制御を状態遷移で制御しようかー。とか考えて、open機能を実装した。たぶんできてる。 7 openと同じようなシーケンスなので、メッセージとちょっとやる事変えて簡単にwrite機能を実装できちゃった。 8 writeと同じようなシーケンスなので、メッセージとちょっとやる事変えて簡単にread機能を実装できちゃった。 9 readと同じようなシーケンスなので、メッセージとちょっとやる事変えて簡単にclose機能を実装できちゃった。 応用 これまでmount、open~closeまでさくっと何も考えずに実装してきた。(そういえばunmount実装してないな。まいいか) 全てはドライバとアプリ間のインタフェースを作ることがひとまずの目的だったので、ドライバを作ってみなければ。 というわけでns16550ドライバを作った。 ns16550は所謂、RS-232C、COMポート、シリアルポート、UARTなどと呼ばれているハードウェアで、割りと制御が簡単。 それぞれ16byteの転送バッファと受信バッファがあって、書き込む(VfsWrite)時は転送バッファがフルでなければ1byteづつ書き込んでフルの時は転送バッファ空割り込