makefileを書いてハマった話
Makefileを書いてみた
とりあえず動くかの確認のために簡単なものを書いた。
hello: hello.cc
gcc -o hello hello.cc
コンパイルするコードはこれ
#include <stdio.h> int main(void) { printf("Hello, world!\n"); return 0; }
これを実行するとどうなるか
GNUmakefile:2: *** missing separator. 中止.
こうなる。
なんでこれでダメなのかわからず3時間悩んだ。。。
解決方法と原因
まず解決方法から
hello: hello.cc
gcc -o hello hello.cc
これで解決。
vimrcを変更
同じことにならないよう、.vimrcを修正しとくことにした。
.vimrcにこれを追加した。
let _curfile=expand("%:r") "GNUmakefileの時のみtabスペース if _curfile == 'GNUmakefile' set noexpandtab endif
これでGNUmakefileを編集するときは自動でハードタブを入力するように、
set expandtab を解除してくれるようになった。
Raspberry pi3でUbuntu serverを立てる!2
はいはい、前回からの続き
前回は、apt-get upgradeで起動できなくなりました。
今回は、対処法がわかったのでここに記録しておきます。
インストールまでは省略します。
参考サイト
https://bugs.launchpad.net/ubuntu/+source/linux/+bug/1652504
ubuntuを初回起動させます
1. user:ubuntu、pass:ubuntuでログインして、新しいパスワードを設定。
2. 今回の難問、パッケージリストの更新をします。
#apt-get update #apt-get upgrade
ここまでは普通
3. upgradeでu-bootの更新が走ります。
こいつが起動しなくなる現況ではと睨んでおります*1。
/boot/firmware/config.txtを編集します。
#vim /boot/firmware/config.txt
https://bugs.launchpad.net/ubuntu/+source/linux/+bug/1652504/comments/16
このコメントを参考に、
こうなっているところを
# set extended DT area
device_tree_address=0x100
device_tree_end=0x8000
こう書き換える
# set extended DT area
device_tree_address=0x2008000
device_tree_end=0x200ff00
何をしてるかってのは私も完璧にはわかっていないんですが、
kernelを読み込むメモリのアドレスを指定しているのではないかと思います*2。
4. 再起動します
#shutdown -r now
やった!起動した!!!
P.S.
raspberry pi for ubuntu seerver16.04ってrpi3には正式対応してないんですね。
ということはこの対応は暫定対応となるので、そのうちこの対応のせいで起動しない。
なーんてことがあるかもしれません。。。
というか、早くそうなれ、普通に起動するようになることを祈って。
Raspberry pi3でUbuntu serverを立てる!
【Prologue】Raspberry pi3で自宅サーバを立ててた
(本題ではありませんので読み飛ばして、どうぞ)
今までの自宅サーバ
Raspberry pi3 Model BにRasbianを入れて運用してました。
VPNとSSH、Mydnsにドメインと紐付けるIPを更新するスクリプトの運用をしてました。
ところがある日電源をぶち切ってしまい、再起動されましたが
起動時にVHABがなにか悪さしてるのか、自宅ネットワークがダウンしてしまう減少に遭遇しました。
理解せず他人のブログのスクリプトをコピペして作ったVPN環境なので
調べてもよくわかんねえし、もうイチから作り直してしまえと、今度は全部自分で理解して建てようと、
そういうことです。
Raspberry pi3で自宅サーバをも1度立てる!
1. そもそもRasbianてなんぞや
2. 使いやすくしてるつもりなのか使いにくくなってる
3. Ubuntuじゃない
との理由からRasbianはもう嫌だ、管理したくない
→じゃあUbuntu使えばいいじゃん
ラズパイでUbuntu動くよな。。。でもラズパイ装飾されたubuntuは嫌だ
www.ubuntu.com
こいつを入れてみた。
うん。うんともすんとも言わねえ、くそ
ARM/RaspberryPi - Ubuntu Wiki
ってことでこっち、
これはubuntu kernelのubuntu管理らしい。
作戦開始!
.img.gzファイルをダウンロードして解答
windowsなら7zipを使って、
debian系linuxならイメージファイルあるページに手順が乗ってる。
MACは嫌いなので知らん
1. SDFromatterでSDカードをフォーマットして
2. Win32 Disk Imagerでイメージを書き込み
3. SDカードをラズパイに突っ込んで
4. ラズパイに電源を接続
やったでおい、起動したでや!!
5. そんでもって、user:ubuntu pass:ubuntuでログイン
6. 新しいパスワードを設定
7. #apt-get update
をして
8. #apt-get upgrade
をして
9. #apt-get install vim ssh //完全なvimとsshをインストール
#update-alternatives --config editor //標準エディタをvimに変更
Press enter to keep the current choice[*], or type selection number: 3
10.#shutdown -r now
よーし、とりあえずリブートだ!!
...あれ?起動しねえ、U-bootでエラー吐いてやがる!!
じゃあまたの機会にまたやり直しますかぁ・・・
DoC◯MoでNMPをした
MVNOでD◯CoMoから乗り換える
最近主婦の間で人気みたい、MVNO
そういうネット記事をよく見る。
別にだから乗り換えるわけじゃないけども、とりあえず一悶着あったので備忘録
乗り換え前の話
私の携帯端末は、
・スマホ → OCNモバイルone データ専用
・ガラケー → docomo契約
だった。
親がスマホにしたいと言い出した。
俺のガラケーの親回線だった、うちの親が解約して、契約がややこしくなった。
ちょうどよく家のネット回線もOCNプロバイダだったので、割引で毎月200円引き*1になった。
ガラケーの2台持ち邪魔
ガラケーと2台持ちをしていたのだが、だんだんガラケーが邪魔になってきた。
DoCoM◯ショップに行くと12月、1月で丁度2年契約の更新だった。
あと、親回線がなくなって俺に請求書が来るはずなのだが、
住所が違って届かない、更に住所変更したのに届かない。
→あとで知ったのだが、名義が親の名義だったので住所があってても届けてくれないらしい。
俺氏Docomo解約する。
俺もDocomoを解約して、スマホに通話もまとめたい。
正月にスマホをぶっ壊す。
なんとか1月の2週目には新端末&データ移行完了した。
さっそく音声つきOcn simを注文。
22日にMNPを申請。
(ネットでも申請できるのだが21時以降は受け付けてくれなかった)
ocnから名義人と住所が違うと電話があった(まだ未成年なので契約できない)
実家にsimが配送されたのが1月26日。
その間に俺はDocomoショップに行って、
・名義人じゃなくても解約できること(名義人との電話確認と代理人の身分証明書が必要)
・MNPの以降中でも解約できること
を確認していた。
実家から自宅に郵送してもらって31日に届くとのことだったので、31日にドコモショップに行った
解約させろ
ドコモショップに行って解約したいですー。と
契約確認しますねー
名義と電話番号を伝える。
ドコモ「本人じゃないとその手続き行えないんですよー」と、
俺 「????あれ?だから電話確認するって言ってましたよね?」
ド「いや、本人に委任状を書いてもらうか、契約者の身分証明証のコピーが必要です。」
俺「???この前聞いたときは、電話確認できて、俺の身分証明書があればいいって言ってたんですが。」
ド「え?いやそれはできません。どこで聞いたんですか??」
俺「イラッ)ここの店で直接聞いたんだよ、」と、前回話したことをほとんどそのまま伝える。
ド「それ誰が言ってたかこの中にいます?」
俺「いや覚えてないです。」どんな人だったかとか覚えてるわけがない、
もともと人の名前と顔を覚えるのは苦手だし。
ド「そうですか、でもできないんですよ。」
俺「いや、言ってること違いすぎだよね、この間聞いたことと全く違うんだけど、何を信じればいいの?」
ド「そう言われましても」とまた委任状云々カンヌン言い出す。
完璧に苛ついていた。だって明日になったら違約金1万も取られるんだぜ??
俺「明日になったら違約金発生するんだけど、MNPの移行手続き中でも取られるんですか?」
ド「そうですね。明日になったら・・・」
俺「それって何時のこと言ってますか?日本時間??」この時点ですごい苛ついてた。
世界標準時でいいの?って聞かなかっただけまだましかな。
ド「本日の0時です」理解してねえなって思った。
俺「じゃあMNPってどのタイミングでおたくのキャリアが解約したことになんの?」
ド「乗り換え先のsimの開通手続きが済んだらですね」
ようは、通信ができるようになればいいらしい。
俺 ブチギレ「」
「わかりました、じゃあMNPで移行したあとのsimはどうしたらいいの、ここ持ってくんの?」
ド「いえ、そちらは別に結構です」
俺「わかりました、ありがとうございました。」
めっちゃ苛ついてドコモショップを出た。
結論:simが届いた。
家に帰るとsimが届いてた。
早速、封筒を開けるとこんな紙が。
"18時以降の申込みは翌日午前中の開通となります。"
現在19:15・・
あー、終わったー、1万飛んだー
とりあえず手続きした。
二度とドコモは使わねえ。
*1:家の回線とセットで期限なし
Arduinoで詰まったメモ
Arduino unoで7segを点灯しようとして詰まった
arduino unoを買ったのはだいぶ前なんだが、弄る暇がなくてずっとほっとかれてた。
正月休みを利用してポチポチいじり始めたのがきっかけ
やりたいこと
Arduino で7segを光らせたい。
回路
ごく普通の7segを点灯させる回路です。
いずれダイナミック点灯にする予定なのでトランジスタでOn/Offします。
ソースコード
つかなかったとき
webのリファレンスを参考に、標準ライブラリで書いた。
※7segの対応しているpinにa~g、dpをdefineしてあります。
void setup() { pinMode(PB0, OUTPUT); pinMode(PB1, OUTPUT); pinMode(seg_b, OUTPUT); pinMode(seg_c, OUTPUT); pinMode(seg_d, OUTPUT); pinMode(seg_e, OUTPUT); pinMode(seg_f, OUTPUT); pinMode(seg_g, OUTPUT); pinMode(seg_dp, OUTPUT); } void loop() { digitalWrite(PB0,LOW); digitalWrite(seg_a,HIGH); digitalWrite(seg_b,HIGH); digitalWrite(seg_c,HIGH); digitalWrite(seg_d,HIGH); digitalWrite(seg_e,HIGH); digitalWrite(seg_f,HIGH); digitalWrite(seg_g,LOW); digitalWrite(seg_dp,LOW); }
ついたとき
標準ライブラリを無視して、レジスタでトランジスタを駆動させた。
void setup() { DDRB = 0x03; DDRD = 0x0f; PORTB = 0x00; } void loop() { PORTB = 0x01; digitalWrite(seg_a,HIGH); digitalWrite(seg_b,HIGH); digitalWrite(seg_c,HIGH); digitalWrite(seg_d,HIGH); digitalWrite(seg_e,HIGH); digitalWrite(seg_f,HIGH); digitalWrite(seg_g,LOW); digitalWrite(seg_dp,LOW); }
これで動いた。
結論
わざわざ動作の遅くなる標準ライブラリを使わないで、
picと同じようにレジスタで動かそうね。