Help us understand the problem. What is going on with this article?

raspberry Pi 1 デバイスドライバ

More than 1 year has passed since last update.

組み込みlinuxで必要となるデバイスドライバを作るため『ARMデバイスドライバープログラミング』という本を見て勉強しようと思った

2017.7.2現在では本の通り進めてもエラーが出て進むことが出来ない。以下の通り行うとエラーを解決できる

本の通りに行うと100ページのinsmodでエラーが出る。内容は
root@raspberrypi:/home/pi# insmod ssegled.ko
insmod: ERROR: could not insert module ssegled.ko: Device or resource busy
root@raspberrypi:/home/pi# dmesg | tail
[ 1045.453728] ssegled loading...
[ 1045.453773] request_mem_region failed.
[ 1045.457656] Can not use GPIO registers. 
である

エラーの内容を出版社に問い合わせたところエラーの原因はlinuxカーネルのバージョンが新しくなっているためであるとの回答があった。解決策として旧カーネルソースを使うことであるとの回答であった。

前提条件
RaspberryPi 1 model B+(SOCがSamsungのタイプのもの)
OSは2015-01-31-raspbian.img

注意点)raspberryPi 1 model B+ には2種類が存在している。種類というのはsocがSamsungのタイプとELPIDAのタイプである。正解のボードはSamsungのsocを搭載したraspberryPi 1 model B+ である。ELPIDAのraspberryPi 1 model B+は使うことが出来ない。その理由はfirmwareが新しくなったため古いraspbiangが起動できないためである。
補足として今日現在発売されているraspberryPi 1 model B+はELPIDAのタイプしか手に入らない。手に入れるにはオークション等で入手すること

soc.jpg

まず最初にパソコンから旧バージョンのraspbianをダウンロードし、micro sdに焼きraspberryPiで起動する。旧バージョンを使う理由は本の内容が旧バージョンにしか対応していないためである。旧バージョンは「2015-01-31-raspbian.img」をダウンロードする。
RaspberryPiに挿入し起動する。繰り返しの説明になるがsocがELPIDAのraspberry Pi1 model B+では旧バージョンのraspbianが起動しないので注意すること

raspbianが起動し初期設定を終えたら$startxでxwindowを起動し端末を起動する

以下の通りコマンドを入力する
$sudo wget https://github.com/raspberrypi/linux/archive/rpi-3.18.y.tar.gz //旧カーネルバージョンのカーネルソースをダウンロードする
$tar xfvz rpi-3.18.y.tar.gz //展開する
$cd rpi-3.18.y
$sudo apt-get install bc //makeに必要なbcをインストールする
$sudo make bcmrpi_defconfig
$sudo make //makeに14時間くらい掛かった
$sudo make modules_install
$sudo cp arch/arm/boot/Image /boot/kernel.img //ビルドしたカーネルをコピーする
$sudo reboot //再起動する

あとは本の100ページのinsmodが本の内容通りになることを確認する

総括
最新のraspbianにはdevice treeという方式を採用したため本の内容が使えなくなった。著者の方に頑張って書いて頂きたいものである

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away