国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Linux驅(qū)動(dòng)開發(fā)筆記(三):基于ubuntu的helloworld驅(qū)動(dòng)源碼編寫、makefile編寫以及驅(qū)動(dòng)編譯加載流程測試

這篇具有很好參考價(jià)值的文章主要介紹了Linux驅(qū)動(dòng)開發(fā)筆記(三):基于ubuntu的helloworld驅(qū)動(dòng)源碼編寫、makefile編寫以及驅(qū)動(dòng)編譯加載流程測試。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

若該文為原創(chuàng)文章,轉(zhuǎn)載請(qǐng)注明原文出處
本文章博客地址:https://hpzwl.blog.csdn.net/article/details/130542981文章來源地址http://www.zghlxwxcb.cn/news/detail-453900.html

紅胖子網(wǎng)絡(luò)科技博文大全:開發(fā)技術(shù)集合(包含Qt實(shí)用技術(shù)、樹莓派、三維、OpenCV、OpenGL、ffmpeg、OSG、單片機(jī)、軟硬結(jié)合等等)持續(xù)更新中…

Linux系統(tǒng)移植和驅(qū)動(dòng)開發(fā)專欄

上一篇:《Linux驅(qū)動(dòng)開發(fā)筆記(二):ubuntu系統(tǒng)從源碼安裝gcc7.3.0編譯器》
下一篇:《Linux驅(qū)動(dòng)開發(fā)筆記(四):設(shè)備驅(qū)動(dòng)介紹、熟悉雜項(xiàng)設(shè)備驅(qū)動(dòng)和ubuntu開發(fā)雜項(xiàng)設(shè)備Demo》


前言

??前面學(xué)習(xí)了驅(qū)動(dòng)的基礎(chǔ)框架,上一篇編譯了gcc7.3.0,那么為了方便很好的熟悉流程,本篇,將使用ubuntu18.04,直接編譯ubuntu18.04的驅(qū)動(dòng),然后做好本篇文章的相關(guān)實(shí)戰(zhàn)測試。


Ubuntu虛擬機(jī)準(zhǔn)備

步驟一:安裝虛擬機(jī)

??本次使用之前rk3568的ubuntu18.04,筆者沒有重新弄了,安裝虛擬機(jī)的過程請(qǐng)自行搜索查找完成。
??Linux驅(qū)動(dòng)開發(fā)筆記(三):基于ubuntu的helloworld驅(qū)動(dòng)源碼編寫、makefile編寫以及驅(qū)動(dòng)編譯加載流程測試

步驟二:獲取內(nèi)核版本號(hào)

??獲取內(nèi)核版本號(hào)是為了確認(rèn)內(nèi)核版本號(hào)一致。

sudo cat /proc/version

??Linux驅(qū)動(dòng)開發(fā)筆記(三):基于ubuntu的helloworld驅(qū)動(dòng)源碼編寫、makefile編寫以及驅(qū)動(dòng)編譯加載流程測試

步驟三:校準(zhǔn)編譯器版本

??前面獲取了內(nèi)核的編譯器版本是gcc7.3.0,但是本機(jī)是gcc7.5,需要變更版本:
??Linux驅(qū)動(dòng)開發(fā)筆記(三):基于ubuntu的helloworld驅(qū)動(dòng)源碼編寫、makefile編寫以及驅(qū)動(dòng)編譯加載流程測試

步驟四:下載內(nèi)核源碼

sudo cat /proc/version
sudo apt-cache search linux-source
sudo apt-get install linux-source-4.15.0

??查看到本ubuntu的內(nèi)核版本,然后下載對(duì)應(yīng)的版本:
??Linux驅(qū)動(dòng)開發(fā)筆記(三):基于ubuntu的helloworld驅(qū)動(dòng)源碼編寫、makefile編寫以及驅(qū)動(dòng)編譯加載流程測試
??以上準(zhǔn)備好的內(nèi)核源碼和編譯器則可以開始編譯內(nèi)核。


內(nèi)核編譯

??注意1:ubuntu的/usr/src下有內(nèi)核的頭文件可編譯直接使用。
??注意2:本標(biāo)題章節(jié)所編譯的內(nèi)核然后使用該內(nèi)核編譯的驅(qū)動(dòng)是不可兼容的。
??Linux驅(qū)動(dòng)開發(fā)筆記(三):基于ubuntu的helloworld驅(qū)動(dòng)源碼編寫、makefile編寫以及驅(qū)動(dòng)編譯加載流程測試

步驟一:下載解壓

??Linux驅(qū)動(dòng)開發(fā)筆記(三):基于ubuntu的helloworld驅(qū)動(dòng)源碼編寫、makefile編寫以及驅(qū)動(dòng)編譯加載流程測試
??發(fā)現(xiàn)其實(shí)系統(tǒng)自帶了header頭文件。(PS:-header- 就是頭文件,驅(qū)動(dòng)和某些和內(nèi)核功能關(guān)聯(lián)的東西都要調(diào)用當(dāng)前內(nèi)核版本的對(duì)應(yīng)頭文件才能正確的編譯出來而且可以使用。所以有些發(fā)行版就制作了專用的 header 包來讓需要的程序調(diào)用。這種包只有 header 文件,沒有其他無關(guān)開發(fā)的內(nèi)容。

cd linux-source-4.18.0/
sudo tar xvf linux-source-4.18.0.tar.bz2

??Linux驅(qū)動(dòng)開發(fā)筆記(三):基于ubuntu的helloworld驅(qū)動(dòng)源碼編寫、makefile編寫以及驅(qū)動(dòng)編譯加載流程測試

步驟二:內(nèi)核配置

cd linux-source-4.18.0
sudo make menuconfig

??Linux驅(qū)動(dòng)開發(fā)筆記(三):基于ubuntu的helloworld驅(qū)動(dòng)源碼編寫、makefile編寫以及驅(qū)動(dòng)編譯加載流程測試
??進(jìn)入了配置:
??Linux驅(qū)動(dòng)開發(fā)筆記(三):基于ubuntu的helloworld驅(qū)動(dòng)源碼編寫、makefile編寫以及驅(qū)動(dòng)編譯加載流程測試
??不做任何配置變動(dòng),退出。

步驟三:直接編譯

make -j8

??Linux驅(qū)動(dòng)開發(fā)筆記(三):基于ubuntu的helloworld驅(qū)動(dòng)源碼編寫、makefile編寫以及驅(qū)動(dòng)編譯加載流程測試
??半小時(shí)左右編譯完成:
??Linux驅(qū)動(dòng)開發(fā)筆記(三):基于ubuntu的helloworld驅(qū)動(dòng)源碼編寫、makefile編寫以及驅(qū)動(dòng)編譯加載流程測試


驅(qū)動(dòng)編譯

??把驅(qū)動(dòng)編譯城模塊,然后加載到內(nèi)核里面。

步驟一:使用前面編寫的驅(qū)動(dòng)和makefile

??Linux驅(qū)動(dòng)開發(fā)筆記(三):基于ubuntu的helloworld驅(qū)動(dòng)源碼編寫、makefile編寫以及驅(qū)動(dòng)編譯加載流程測試

驅(qū)動(dòng)代碼文件

??Linux驅(qū)動(dòng)開發(fā)筆記(三):基于ubuntu的helloworld驅(qū)動(dòng)源碼編寫、makefile編寫以及驅(qū)動(dòng)編譯加載流程測試

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

static int hello_init(void)
{
    // 在內(nèi)核里面無法使用基礎(chǔ)c庫printf,需要使用內(nèi)核庫printk
    printk(“Hello, I’m hongPangZi\n”);
    return 0;
}

static void hello_exit(void)
{
    printk(“bye-bye!!!\n”);
}

MODULE_LICENSE(“GPL”);

module_init(hello_init);
module_exit(hello_exit);

驅(qū)動(dòng)makefile

??Linux驅(qū)動(dòng)開發(fā)筆記(三):基于ubuntu的helloworld驅(qū)動(dòng)源碼編寫、makefile編寫以及驅(qū)動(dòng)編譯加載流程測試
??這里make過不去,發(fā)現(xiàn)這里不能是空格,如下圖,才可以:
??Linux驅(qū)動(dòng)開發(fā)筆記(三):基于ubuntu的helloworld驅(qū)動(dòng)源碼編寫、makefile編寫以及驅(qū)動(dòng)編譯加載流程測試

obj-m += helloworld.o

KDIR:=/usr/src/linux-source-4.18.0/linux-source-4.18.0

PWD?=$(shell pwd)

all:
    make -C $(KDIR) M=$(PWD) modules

步驟二:編譯make

make

??直接在驅(qū)動(dòng)工程目錄編譯:
??Linux驅(qū)動(dòng)開發(fā)筆記(三):基于ubuntu的helloworld驅(qū)動(dòng)源碼編寫、makefile編寫以及驅(qū)動(dòng)編譯加載流程測試

??這里是makefile的m要大寫,修改后可編譯:
??Linux驅(qū)動(dòng)開發(fā)筆記(三):基于ubuntu的helloworld驅(qū)動(dòng)源碼編寫、makefile編寫以及驅(qū)動(dòng)編譯加載流程測試

??應(yīng)該是windows拷貝 過來字符編碼啥的變了(雙引號(hào)),這里更正一下:
??Linux驅(qū)動(dòng)開發(fā)筆記(三):基于ubuntu的helloworld驅(qū)動(dòng)源碼編寫、makefile編寫以及驅(qū)動(dòng)編譯加載流程測試
??Linux驅(qū)動(dòng)開發(fā)筆記(三):基于ubuntu的helloworld驅(qū)動(dòng)源碼編寫、makefile編寫以及驅(qū)動(dòng)編譯加載流程測試
??然后再編譯:
??Linux驅(qū)動(dòng)開發(fā)筆記(三):基于ubuntu的helloworld驅(qū)動(dòng)源碼編寫、makefile編寫以及驅(qū)動(dòng)編譯加載流程測試
??編譯成功
??Linux驅(qū)動(dòng)開發(fā)筆記(三):基于ubuntu的helloworld驅(qū)動(dòng)源碼編寫、makefile編寫以及驅(qū)動(dòng)編譯加載流程測試

步驟三:加載卸載驅(qū)動(dòng)測試

??將驅(qū)動(dòng)拷貝到開發(fā)板或者目標(biāo)系統(tǒng),然后使用加載指令:

insmod helloworld.ko

??會(huì)打印入口加載的printk輸出。
??Linux驅(qū)動(dòng)開發(fā)筆記(三):基于ubuntu的helloworld驅(qū)動(dòng)源碼編寫、makefile編寫以及驅(qū)動(dòng)編譯加載流程測試

??出現(xiàn)問題可能原因一是內(nèi)核編譯使用的編譯器和模塊使用的編譯器版本不一致。
??這里我們核對(duì)過是一樣的,所以此處暫時(shí)也不知道如何,如下圖:
??Linux驅(qū)動(dòng)開發(fā)筆記(三):基于ubuntu的helloworld驅(qū)動(dòng)源碼編寫、makefile編寫以及驅(qū)動(dòng)編譯加載流程測試

??那么懷疑問題二:編譯模塊時(shí)選擇的Linux頭文件目錄與當(dāng)前運(yùn)行的系統(tǒng)版本不匹配(可能是配置吧,明顯大版本和子版本是一致的)
??所以這里我們重新配置一下makefile,直接引用linux-header如下:

??Linux驅(qū)動(dòng)開發(fā)筆記(三):基于ubuntu的helloworld驅(qū)動(dòng)源碼編寫、makefile編寫以及驅(qū)動(dòng)編譯加載流程測試
??編譯通過:
??Linux驅(qū)動(dòng)開發(fā)筆記(三):基于ubuntu的helloworld驅(qū)動(dòng)源碼編寫、makefile編寫以及驅(qū)動(dòng)編譯加載流程測試

??繼續(xù)加載、查看和卸載測試:
??Linux驅(qū)動(dòng)開發(fā)筆記(三):基于ubuntu的helloworld驅(qū)動(dòng)源碼編寫、makefile編寫以及驅(qū)動(dòng)編譯加載流程測試

??發(fā)現(xiàn)ubuntu中printk終端無打印的問題,是重定向問題,打入內(nèi)核日志消息了,可以使用dmesg進(jìn)行查看:

??Linux驅(qū)動(dòng)開發(fā)筆記(三):基于ubuntu的helloworld驅(qū)動(dòng)源碼編寫、makefile編寫以及驅(qū)動(dòng)編譯加載流程測試

??至此,會(huì)發(fā)現(xiàn)作為ubuntu來說,自帶的/usr/src下的就是內(nèi)核的頭文件編譯直接使用就可以了,無需編譯內(nèi)核,但是編譯器還是需要的。
??本文章內(nèi)核編譯保留,因?yàn)榫幾g內(nèi)核是一個(gè)準(zhǔn)備條件。


上一篇:《Linux驅(qū)動(dòng)開發(fā)筆記(二):ubuntu系統(tǒng)從源碼安裝gcc7.3.0編譯器》
下一篇:《Linux驅(qū)動(dòng)開發(fā)筆記(四):設(shè)備驅(qū)動(dòng)介紹、熟悉雜項(xiàng)設(shè)備驅(qū)動(dòng)和ubuntu開發(fā)雜項(xiàng)設(shè)備Demo》


若該文為原創(chuàng)文章,轉(zhuǎn)載請(qǐng)注明原文出處
本文章博客地址:https://hpzwl.blog.csdn.net/article/details/130542981

到了這里,關(guān)于Linux驅(qū)動(dòng)開發(fā)筆記(三):基于ubuntu的helloworld驅(qū)動(dòng)源碼編寫、makefile編寫以及驅(qū)動(dòng)編譯加載流程測試的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • Linux驅(qū)動(dòng)開發(fā)筆記(四):設(shè)備驅(qū)動(dòng)介紹、熟悉雜項(xiàng)設(shè)備驅(qū)動(dòng)和ubuntu開發(fā)雜項(xiàng)設(shè)備Demo

    Linux驅(qū)動(dòng)開發(fā)筆記(四):設(shè)備驅(qū)動(dòng)介紹、熟悉雜項(xiàng)設(shè)備驅(qū)動(dòng)和ubuntu開發(fā)雜項(xiàng)設(shè)備Demo

    若該文為原創(chuàng)文章,轉(zhuǎn)載請(qǐng)注明原文出處 本文章博客地址:https://hpzwl.blog.csdn.net/article/details/134533533 紅胖子網(wǎng)絡(luò)科技博文大全:開發(fā)技術(shù)集合(包含Qt實(shí)用技術(shù)、樹莓派、三維、OpenCV、OpenGL、ffmpeg、OSG、單片機(jī)、軟硬結(jié)合等等)持續(xù)更新中… 上一篇:《Linux驅(qū)動(dòng)開發(fā)筆記(三

    2024年02月05日
    瀏覽(50)
  • i.MX 6ULL 驅(qū)動(dòng)開發(fā) 二十九:向 Linux 內(nèi)核中添加自己編寫驅(qū)動(dòng)

    i.MX 6ULL 驅(qū)動(dòng)開發(fā) 二十九:向 Linux 內(nèi)核中添加自己編寫驅(qū)動(dòng)

    Linux 內(nèi)核編譯流程如下: 1、配置 Linux 內(nèi)核。 2、編譯 Linux 內(nèi)核。 說明:進(jìn)入 Linux 內(nèi)核源碼,使用 make help 參看相關(guān)配置。 1、 menuconfig 它本身是一個(gè)軟件,只提供圖形界面配置的一些邏輯,并不負(fù)責(zé)提供內(nèi)容。 2、 menuconfig 是內(nèi)核源碼樹的各目錄下的 kconfig 提供的。 3、 m

    2023年04月10日
    瀏覽(17)
  • 基于ubuntu的驅(qū)動(dòng)開發(fā)

    基于ubuntu的驅(qū)動(dòng)開發(fā)

    ??一般的linux驅(qū)動(dòng)開發(fā)都是基于交叉編譯來進(jìn)行的,本文嘗試著從另一個(gè)角度:基于ubuntu的本地驅(qū)動(dòng)開發(fā)來學(xué)習(xí)一下驅(qū)動(dòng)的開發(fā) 1.1、編寫驅(qū)動(dòng)文件 1.2、查找內(nèi)核文件位置 1.3、編寫makefile文件 ??其中KERNELDIR 就是前面查找的內(nèi)核目錄 1.4、編譯 2.1、加載驅(qū)動(dòng) 2.2、卸載驅(qū)動(dòng)

    2024年02月12日
    瀏覽(16)
  • 【Linux驅(qū)動(dòng)開發(fā)】編譯Android12源碼

    基于訊為電子rk3568教程 rk_android12.0_sdk_20220720.tar.gz 解壓 設(shè)置屏幕配置 整體編譯 Android 固件 使能編譯環(huán)境 開始整體編譯 rockdev/Image-rk3568_s // 編譯成功鏡像存放位置 單獨(dú)編譯u-boot (方法一) 編譯完成后在 u-boot 目錄會(huì)生成 rk356x_spl_loader_v1.13.112.bin 文件、uboot.img 文件、 resourc

    2024年02月05日
    瀏覽(23)
  • linux驅(qū)動(dòng)開發(fā)筆記一

    Linux操作系統(tǒng) 1,Linux操作系統(tǒng)基礎(chǔ): 1),基礎(chǔ)知識(shí) 第一塊處理器:intel 4004 Intel 8008 ,i8086,…協(xié)處理器(主從機(jī)制); 80386,80586,奔騰,酷睿,四核; 1971年IBM發(fā)布個(gè)人電腦5150; deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic main restricted universe multiverse deb-src https://mirrors.tuna

    2023年04月13日
    瀏覽(18)
  • Linux驅(qū)動(dòng)開發(fā)學(xué)習(xí)筆記

    (Trusted Firmware - Arm) tsv語法 p220 ‘P’:向分區(qū)或者設(shè)備燒寫固件。 ‘E’:空分區(qū)或設(shè)備,表示對(duì)應(yīng)的分區(qū)或設(shè)備不更新,相關(guān)的 Id項(xiàng)會(huì)被跳過。 ‘D’:刪除分區(qū)或設(shè)備。 TF_A的bl33部分是uboot,uboot的功能是引導(dǎo)、啟動(dòng)linux。 U-boot命令 一般環(huán)境變量存放在外部flash中,uboo

    2024年02月14日
    瀏覽(22)
  • 嵌入式Linux驅(qū)動(dòng)開發(fā) 04:基于設(shè)備樹的驅(qū)動(dòng)開發(fā)

    嵌入式Linux驅(qū)動(dòng)開發(fā) 04:基于設(shè)備樹的驅(qū)動(dòng)開發(fā)

    前面文章 《嵌入式Linux驅(qū)動(dòng)開發(fā) 03:平臺(tái)(platform)總線驅(qū)動(dòng)模型》 引入了資源和驅(qū)動(dòng)分離的概念,這篇文章將在前面基礎(chǔ)上更進(jìn)一步,引入設(shè)備樹的概念。 在平臺(tái)總線驅(qū)動(dòng)模型中資源和驅(qū)動(dòng)已經(jīng)從邏輯上和代碼組織上進(jìn)行了分離,但每次調(diào)整資源還是會(huì)涉及到內(nèi)核,所以現(xiàn)

    2024年02月16日
    瀏覽(27)
  • 基于ubuntu的STM32嵌入式軟件開發(fā)(四)——應(yīng)用軟件工程的修改、Makefile及編譯腳本的編寫

    基于ubuntu的STM32嵌入式軟件開發(fā)(四)——應(yīng)用軟件工程的修改、Makefile及編譯腳本的編寫

    ????????本文主要介紹基于標(biāo)準(zhǔn)庫函數(shù)移植的STM32的應(yīng)用軟件工程的修改,主要涉及到文件內(nèi)容修改、Makefile文件編寫、編譯腳本編寫等內(nèi)容,其中編譯腳本是基于arm-none-eabi-gcc的交叉編譯器撰寫的。程序親測可以正常編譯,生成.bin和.hex的可燒錄鏡像文件。 1.首先修改 pr

    2023年04月15日
    瀏覽(37)
  • <Linux開發(fā)>驅(qū)動(dòng)開發(fā) -之-基于pinctrl/gpio子系統(tǒng)的beep驅(qū)動(dòng)

    <Linux開發(fā)>驅(qū)動(dòng)開發(fā) -之-基于pinctrl/gpio子系統(tǒng)的beep驅(qū)動(dòng)

    <Linux開發(fā)>驅(qū)動(dòng)開發(fā) -之-基于pinctrl/gpio子系統(tǒng)的beep驅(qū)動(dòng) 交叉編譯環(huán)境搭建: <Linux開發(fā)> linux開發(fā)工具-之-交叉編譯環(huán)境搭建 uboot移植可參考以下: <Linux開發(fā)> -之-系統(tǒng)移植 uboot移植過程詳細(xì)記錄(第一部分) <Linux開發(fā)> -之-系統(tǒng)移植 uboot移植過程詳細(xì)記錄(第二部分

    2024年02月13日
    瀏覽(18)
  • Linux設(shè)備驅(qū)動(dòng)開發(fā)學(xué)習(xí)筆記(等待隊(duì)列,鎖,字符驅(qū)動(dòng)程序,設(shè)備樹,i2C...)

    container_of函數(shù)可以通過結(jié)構(gòu)體的成員變量檢索出整個(gè)結(jié)構(gòu)體 函數(shù)原型: 內(nèi)核開發(fā)者只實(shí)現(xiàn)了循環(huán)雙鏈表,因?yàn)檫@個(gè)結(jié)構(gòu)能夠?qū)崿F(xiàn)FIFO和LIFO,并且內(nèi)核開發(fā)者要保持最少代碼。 為了支持鏈表,代碼中要添加的頭文件是linux/list.h。內(nèi)核中鏈表實(shí)現(xiàn)核心部分的數(shù)據(jù)結(jié)構(gòu) 是struct li

    2024年01月22日
    瀏覽(19)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包