LinuxでハードウェアI/O制御する例として、システムビープのI/Oポートを操作して、Ubuntu Linuxでビープ音を鳴らしたので備忘録を残す。
【Ubuntu 20.04/18.04 LTS】gcc, make などの開発ツールをインストールして使う
前の記事で「Ubuntu 18.04 LTS Server」をインストールした。続いて、gccやmakeコマンドの開発ツールを使えるようにしたので備忘録を残す。尚、「Ubuntu 18.04 LTS Desktop」のターミナルでも手順は同...
システム・タイマのハード仕様
関連するI/Oレジスタについては、姉妹サイトの下記記事参照。
LinuxでI/Oポート操作(Beep音を鳴らす) [新石器Wiki]
テストプログラム
I/Oポートを操作するサンプルプログラム。
#include <stdint.h>
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h> /* for usleep */
#include <sys/io.h> /* for inb,outb */
static void beep_on(void)
{
outb(inb(0x61)|3, 0x61); /* beep on */
}
static void beep_off(void)
{
outb(inb(0x61)&0xfc, 0x61); /* beep off */
}
int main(int argc, char *argv[])
{
uint32_t count;
if ((ioperm(0x0040, 4, 1)) || (ioperm(0x0061, 1, 1))) {
perror("ioperm");
return 1;
}
count = 1193180/1000; /* 1000 Hz */
outb(0xb6, 0x43); /* set freq */
outb(count & 0xff, 0x42);
outb((count>>8) & 0xff, 0x42);
beep_on();
usleep(1000000); /* 1sec wait */
beep_off();
return 0;
}
- ioperm関数で、ポートの入出力許可を設定する。
コンパイル方法
上記ソースを、beep_test.c
ファイルに作成。下記コマンドでコンパイル。
$ gcc -o beep_test beep_test.c
実行方法
root権限で実行する。
$ sudo ./beep_test
実行すると、1秒間ビープ音が鳴る。
コメント