1. 程式人生 > >交叉編譯linux驅動程式

交叉編譯linux驅動程式

1,獲取原始碼odroid開發板核心原始碼(已經打了preempt_rt-3.14.79-rt84實時補丁),並編譯核心和驅動模組,並安裝驅動模組:

      $cd ~/odroid_c2

      $git clone https://github.com/moonlinux/linux.git  -b odroidc2-3.14.y-rt

      $cd ./linux

      $make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- Image -j4

      $make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- modules -j4

      $make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- modules_install INSTALL_MOD_PATH=~/odroid_c2/modules

(編譯器下載地址:https://releases.linaro.org/components/toolchain/binaries/4.9-2017.01/aarch64-linux-gnu/gcc-linaro-4.9.4-2017.01-x86_64_aarch64-linux-gnu.tar.xz)

2,編譯驅動:

   $make  ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu-  -j4

3,原始碼

驅動原始碼:

/* simple kernel module:hello.c

 *
 * Copyright (C) 2014 Barry Song ([email protected])
 *
 * Licensed under GPLv2 or later.
 */

#include <linux/init.h>
#include <linux/module.h>

static int __init hello_init(void)
{
  printk(KERN_INFO "Hello World enter\n");
  return 0;
}
module_init(hello_init);

static void __exit hello_exit(void)
{
  printk(KERN_INFO "Hello World exit\n");
}
module_exit(hello_exit);

MODULE_AUTHOR("Barry Song <
[email protected]
>");
MODULE_LICENSE("GPL v2");
MODULE_DESCRIPTION("A simple Hello World Module");
MODULE_ALIAS("a simplest module");

-----------------------

Makefile檔案:

#for Amlogic S905-build commond line :
#or: make  ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu-  -j4

obj-m := hello.o
KDIR := /home/bruce/odroid_c2/modules/lib/modules/3.14.79-rt84+/build
KBUILD_CFLAGS +=  -march=armv8-a -mtune=cortex-a53
MAKE := make
build: kernel_modules
kernel_modules:
        ${MAKE} -C $(KDIR) M=$(PWD) modules

.PHONY: clean
clean:
        ${MAKE} -C $(KDIR) M=$(PWD) clean

相關推薦

交叉編譯linux驅動程式

1,獲取原始碼odroid開發板核心原始碼(已經打了preempt_rt-3.14.79-rt84實時補丁),並編譯核心和驅動模組,並安裝驅動模組:       $cd ~/odroid_c2       $git clone https://github.com/moo

linux核心檔案中新增自己的驅動,新增自己的linux驅動編譯自己的linux驅動程式方法和例子圖文

此文章為done原創,轉載請寫明出處,尊重原創。 寫這個文章,我參考了網上的一些部落格: http://bbs.chinaunix.net/thread-3634524-1-1.html http://www.bkjia.com/gjrj/800182.html 也參考

最簡單的 Linux 驅動程式

前些天開啟以前的硬碟,翻看到以前學驅動的筆記,於是想將這些東西的一部分記錄下來,以後有空可以經常翻閱。 1.編譯/執行環境     Ubuntu 14.04 LTS, Linux 3.19.0-25-generic, gcc version

第一個linux驅動程式,hello

前面已經把學習linux的開發環境搭建好了,現在逐步開始學習開發過程。先從核心驅動開始,寫一個網上已經被寫爛的實列程式。先把它編譯好,放進linux系統執行,看看是什麼樣子。 建立資料夾hello,在資料夾下面建立檔案hello.c程式碼如下: #include <linux/

Linux 驅動程式入門 四

版權宣告 本文為博主隨手筆記,歡迎評論和轉載 https://www.cnblogs.com/dl04301201/p/10114103.html 博主CNSD原文 :https://mp.csdn.net/mdeditor/84987796 驅動是具有入口和出口的一組方法的集合,這一組方法才是驅動的核心內

Linux 驅動程式入門

驅動是具有入口和出口的一組方法的集合,這一組方法才是驅動的核心內容。 對於字元裝置驅動程式,最核心的就是 file_operation 結構,這個結構實際上是提供給虛擬檔案系統 [ VFS ] 的檔案介面,它的每一個成員函式一般都對應一個系統呼叫。使用者程序利用系統呼叫對裝置檔案進行諸如讀和寫操作時

[嵌入式Linux驅動]S5PV210的步進電機Linux驅動程式

#include <asm/io.h> #include <asm/uaccess.h> #include <linux/fs.h> #include <linux/delay.h> #include <linux/module.h> #inclu

【嵌入式Linux驅動程式-基礎篇】- 驅動與硬體層間的通訊

驅動與硬體層間的通訊 1 IO埠和IO記憶體 目前大多數處理器外設都是通過讀寫暫存器操作晶片外設,這些暫存器處於記憶體地址或者I/O地址上。從硬體角度考慮,記憶體和IO區域沒有概念上的區別,均是通過地址匯流排、資料匯流排和控制匯流排(讀寫訊號)來進行讀寫操作。 並非所有

linux驅動程式除錯方法

來自:https://blog.csdn.net/caijp1090/article/details/7471862https://blog.csdn.net/gatieme/article/details/68948080驅動程式開發的一個重大難點就是不易除錯。本文目的就是

交叉編譯linux核心,報undefined reference *** 錯誤

錯誤提示,與built-in.o檔案相關的引用錯誤,導致無法連線生成vmlinux.o檔案 解決:用source insight在原始碼中查詢 報錯的引用量所在的位置(本次錯誤中提示未定義的量為:omap_mcbsp_dai) ,得到omap_mcbsp_dai定義的檔案

Linux驅動程式編寫&&應用程式對她的呼叫

        Linux驅動程式的開發,我相信這是很多致力於嵌入式學習的騷年的終極夢想,不管是技術含量,還是薪金待遇,她都一一完美的體現了出來!當然,crk_13也一樣!不過,越是誘人的東西往往也越是可望而不可即,或許大家都對驅動開發的難度之大,要求之高有所耳聞!以我個人

linux驅動程式介面

1. Linux驅動程式介面 系統呼叫是作業系統核心與應用程式之間的介面,裝置驅動程式則是作業系統核心與機器硬體的介面。幾乎所有的系統操作最終對映到物理裝置,除了CPU、記憶體 和少數其它裝置,所有的裝置控制操作都由該裝置特殊的可執行程式碼實現,此程式碼就是裝置驅動程式。作業系統核心需要訪問兩類主要裝置:字元

linux驅動程式開發的學習步驟

1. 學會寫簡單的makefile  2. 編一應用程式,可以用makefile跑起來  3. 學會寫驅動的makefile 4. 寫一簡單char驅動,makefile編譯通過,可以insmod, lsmod, rmmod. 在驅動的init函式裡列印hello world, insmod後應該能夠通過d

編寫linux驅動程式步驟

一、建立Linux驅動框架(裝載、解除安裝Linux驅動)     Linux核心在使用驅動時首先要裝載驅動,在裝載過程中進行一些初始化動作(建立裝置檔案、分配記憶體等),在驅動程式中需提供相應函式來處理驅動初始化工作,該函式須使用module_init巨集指定;Linux系統在退出是需解除安裝Linux驅

在x86架構機器上交叉編譯linux核心方法

環境介紹: loongson3-4核cpu(mips),編譯機器x86-64位伺服器 在x86伺服器上交叉編譯mips架構的核心方法: 在x86上編譯mips架構核心時,需要使用交叉編譯器,這裡使用的

嵌入式Linux驅動程式開發

嵌入式Linux驅動程式開發系統呼叫是作業系統核心和應用程式之間的介面,裝置驅動程式是作業系統核心和機器硬體之間的介面。裝置驅動程式為應用程式遮蔽了硬體的細節,這樣在應用程式看來,硬體裝置只是一個裝置檔案,應用程式可以象操作普通檔案一樣對硬體裝置進行操作。裝置驅動程式是核心的

linux驅動程式中的互斥體

/* * g_mtex.c * * Created on: 2016年11月21日 * Author: chy */ #include <linux/types.h> #include <linux/stat.h> #include <linux/unis

如何在windows上用ndk交叉編譯其他平臺程式

目標       :編譯arm64的.so庫 編譯方法:理論上應該有兩種交叉編譯方法,法一,在Linux伺服器上安裝交叉工具鏈,直接用交叉工具鏈進行編譯連結;法二,使用ndk完成交叉編譯,因為 ndk已經安裝好交叉編譯工具鏈,以及相關的系統庫和系統標頭檔案了。這兩種方法的區

GDB arm-linux交叉編譯移植和使用方法(特別是對於正在執行的程式或者段錯誤的程式進行分析)

測試程式碼中的test1是用來定位堆疊段錯誤,Delay函式是用來定位程式阻塞,都可以用gdb定位出來,如下:  (1)測試程式執行時首先會有個段錯誤:./gdbtest & [[email protected] user0]$ [65334.020000] pgd = c3e14000 [

基於mini2440嵌入式linux上整合一套Domoticz智慧家居系統(七)交叉編譯paho.mqtt.embedded-c庫和嵌入式linux樣例程式

本篇將把paho.mqtt.embedded-c官方的原始碼交叉編譯成資料包封裝庫和應用程式兩部分,並把樣例應用程式在mini2440上執行。 一、首先編譯MQTT協議包封裝庫: 解壓paho.mqtt.embedded-c-master.zip之後,進入目