raspberry核心編譯和模組開發

來源:互聯網
上載者:User

因為打算學一學linux驅動編程了,特意買了一塊raspberry來作為開發環境。直接通過鏡像按照的核心並不能直接用來做模組開發,因為發行版自身是不帶核心源碼樹的,但是模組開發這個是必要的。所有要進行核心模組開發第一步就是要編譯核心。具體到不同版本的raspberry,編譯方法有細微的差別,這個raspberry官方有一篇文檔專門將這個。我這個核心的編譯過程主要就是參考這篇 KERNEL BUILDING 文章的。核心編譯有兩種方法,一種是在raspberry本地編譯,另一種是在另外一台機器上編譯好然後考到raspberry的記憶卡上。直接在raspberry上編譯編譯比較簡單但是比較花時間,我編譯花了大概一個多小時,我個人認為這速度還可以:)。另一種是在pc上交叉編譯,得益於官方提供的交叉編譯工具,raspberry kernel在pc上的編譯過程也比較簡單。我這裡記錄下我在raspberry上編譯的過程。 核心編譯

1、下載linux核心源碼,我直接放在使用者主目錄了,這個在編譯模組的時候是會用到的。

git clone --depth=1 https://github.com/raspberrypi/linux

2、 安裝缺少的依賴。

sudo apt-get install bc

3、 核心配置,pi1和pi2,3不一樣。我這裡的是pi3,所以我只說明pi3的,pi1參考官方文檔。

cd linuxKERNEL=kernel7make bcm2709_defconfig

4、 編譯安裝核心和模組。

make -j4 zImage modules dtbssudo make modules_installsudo cp arch/arm/boot/dts/*.dtb /boot/sudo cp arch/arm/boot/dts/overlays/*.dtb* /boot/overlays/sudo cp arch/arm/boot/dts/overlays/README /boot/overlays/sudo scripts/mkknlimg arch/arm/boot/zImage /boot/$KERNEL.img

5、 reboot或者開機重啟下,使用uname看下核心版本是否發生了變化。 模組開發

我這裡使用的是《LINUX裝置驅動程式》這本書上的例子來做的。下面是一個過程的 記錄。
1、 使用編輯軟體編輯模組原始碼,我的是hello.c

#include <linux/init.h>#include <linux/module.h>MODULE_LICENSE("Dual BSD/GPL");static int hello_init(void){    printk(KERN_ALERT "Hello, world\n");    return 0;}static void hello_exit(void){    printk(KERN_ALERT "Goodbye, cruel world\n");}module_init(hello_init);module_exit(hello_exit);

2、 編輯Makefile檔案,我這個比較簡單只是用來測試用的。

obj-m := hello.o

3、 在命令列中編譯模組。-C參數指定核心源碼樹位置,M為模組源碼所在目錄。modules沒搞明白是幹嘛的。

make -C ~/linux M=/home/pi/workspace modules

4、 模組的安裝卸載及其輸出的查看。

insmod ./hello.kormmod hellotail -2 /var/log/syslog

第一個簡單的模組就這樣編譯完了,有了這些準備為我們後面的模組開發做準備。另外一些模組開發環境的配置方法可以參考這篇
著網線了。然後將ip地址設定為靜態密碼,以後每次啟動時,路由器都會自動將這個ip分配給樹莓派。

1、 將樹莓派串連到路由
通過有線來串連,因為有線串連的好處是不要求輸入密碼,把線接上就可以使用了。接上網卡,接通電源,然後現在就可以串連樹莓派了。在此之前第一步是要擷取到樹莓派的ip,第一次連的時候樹莓派的ip地址是路由器隨機分配的。進入路由器管理頁面就可以看到。

2、擷取到了ip,樹莓派的預設使用者是pi,密碼是raspberry。可以通過上面的資訊登入了。具體登入工具通過ssh來登入。在ssh登入工具中輸入ip,使用者名稱和密碼就可以了。如果是linux系統,可以使用下面的命令來登入。192.168.0.101是我的樹莓派分配到的ip,以每個人的情況不同。

$ ssh pi@192.168.0.101

3、登入之後修改網卡資訊。修改之前可以先看下網卡資訊,使用 $ iftop 來查看。可以看到一個wlan0就是我的無線網卡了。後面通過vim配置網卡的資訊。我的樹莓派安裝的是Raspbian。基於debian的,所以他的網卡路徑和debian一樣的。修改/etc/network/interfaces檔案。

auto loiface lo inet loopbackiface eth0 inet dhcpallow-hotplug wlan0iface wlan0 inet staticwpa-ssid  netgear          #你要串連的wifi ssidwpa-psk  1234567890     #你的wpa串連密碼 address 192.168.1.110     # 設定的靜態IP地址netmask 255.255.255.0     # 網路遮罩gateway 192.168.1.1      # 網關network 192.168.1.1      # 網路地址#wpa-roam /etc/wpa_supplicant/wpa_supplicant.conf       #注釋掉這一行iface default inet dhcp

然後重啟下就可以了,就可以進入到系統了。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.