嵌入式開發Linux驅動篇——驅動編譯到內核

2021-02-23 Outsider Hub
文章目錄

make menuconfig圖形化配置界面

1. 怎麼進入到make menuconfig圖形化界面?

2. make menuconfig圖形化界面的操作

3. 退出

4. 和make menuconfig有關的文件

5. make menuconfig會讀哪個目錄下的Kconfig文件

6. 為什麼要複製成.config而不是其他文件

7. 我們複製的這個默認的配置選項不符合我們的要求怎麼辦?

8. 怎麼和Makefile文件建立的關係

驅動編譯到內核

make menuconfig圖形化配置界面1. 怎麼進入到make menuconfig圖形化界面?

首先進入到內核源碼的路徑下

然後輸入

make menuconfig

即可打開這個界面

2. make menuconfig圖形化界面的操作

搜索功能

配置驅動狀態

把驅動編譯編譯成模塊(用M表示)

把驅動編譯到內核裡面(用*來表示)

不編譯

3. 退出

退出分為保存退出和不保存退出

4. 和make menuconfig有關的文件5. make menuconfig會讀哪個目錄下的Kconfig文件

arch/ $ARCH/目錄下的Kconfig

arch/arm/configs

有好多的配置文件,相當於這個飯店的特色菜

6. 為什麼要複製成.config而不是其他文件

複製配置文件到源碼根目錄

cp imx_v7_defconfig /work/linux-4.1.15/.config

注意:
複製成.config格式

查看我們複製的.config格式文件

能不能是其他的文件名字?

肯定是不行的,因為內核會默認讀取Linux內核根目錄下的.config作為默認的配置選項,所以不可以改名字

7. 我們複製的這個默認的配置選項不符合我們的要求怎麼辦?

我們要就要點菜,菜單是Kconfig,通過make menuconfig來調出來這個菜單了

也就是按照要求從圖形化界面選擇就是了。

配置完成以後會自動更新到.config裡面

8. 怎麼和Makefile文件建立的關係

當我們make menuconfig保存退出以後,Linux會將所有的配置選項以宏定義的形式保存在include/generated/下面的autoconf.h裡面


具體怎麼建立關係也不是我們關心的內容。

驅動編譯到內核Kconfig例子

source "drivers/redled/Kconfig"
config LED_4412
tristate "Led Support for GPIO Led"
depends on LEDS_CLASS
help
This option enable support for led

source "drivers/redled/Kconfig"

包含drivers/redled這個路徑下的驅動文件,方便對菜單管理

config LED_4412

配置選項的名稱LED_4412

tristate "Led Support for GPIO Led"

tristate表示驅動狀態(1、驅動編譯成模塊,2、驅動編譯到內核,3、不編譯),
與之對應的還有bool(1、編譯到內核,2、不編譯)
「Led Support for GPIO Led」 是make menuconfig顯示的名字

depends on LEDS_CLASS

helloworld準備第一步,複製.c文件到指定位置

首先是打開我們linux源碼的char文件位置

cd /work/linux-4.1.15/drivers/char/


新建helloworld文件夾

mkdir helloworld

chmod 777 helloworld

複製過來我們之前的helloworld.c 文件就可以了

第二步,新建helloworld對應的Kconfig

nano Kconfig

根據上面的例子寫出helloworld的Kconfig

config HELLOWORLD
tristate "helloworld"
help
This option enable support for helloworld

第三步,新建helloworld對應的Makefile

nano Makefile

obj-$(CONFIG_HELLOWORLD)+=helloworld.o

第四步,修改char目錄下的Kconfig Makefile

返回上一層目錄,來到char目錄

首先是Makefile

obj-$(CONFIG_HELLOWORLD) += helloworld/


然後就是Kconfig文件

source "drivers/char/helloworld/Kconfig"

imx_v7_defconfig—>.config

首先執行一個操作

. /opt/fsl-imx-x11/4.1.15-2.1.0/environment-setup-cortexa9hf-neon-poky-linux-gnueabi

make distclean

清除掉linux源碼根目錄下的.config文件

然後可以

ls .config

查看一下是否被清除掉

make menuconfig的配置文件有一個默認的

cd arch/arm/configs/

我們可以在文件下找到imx_v7_defconfig

我們這裡後面還需要用到,現在需要的是把imx_v7_defconfig複製成linux源碼根目錄下的.config文件

cp imx_v7_defconfig /work/linux-4.1.15/.config

make menuconfig

上一步的複製主要為了這一步,因為我們的make menuconfig運行,就是配置我們的.config文件

然後我們就可以找到我們的hello world了




找到以後,使用 空格 操作,修改成編譯到內核

之後保存退出就可以了

這時候我們可以打開.config文件,查看是不是修改成功了

nano .config


打開後,ctrl+w 就可以搜索我們的hello

.config—>imx_v7_defconfig

剛才默認配置文件imx_v7_defconfig變成臨時的配置文件 .config,現在我們要變回去,因為後面的 make imx_v7_defconfig 操作,會從目錄/arch/arm/configs中找到imx_v7_defconfig來進行加載配置

編譯

這裡使用腳本文件

#!/bin/bash
make distclean
make imx_v7_defconfig
make zImage -j16
make dtbs
make modules -j16

執行完畢後,我們查看是否成功,通過helloworld目錄下有沒有編譯後生成的helloworld.o文件就可以了

相關焦點

  • Linux驅動05 | 內核編譯
    二、電腦的開發環境虛擬機:VMWare12.0以上作業系統:Ubuntu 16.04晶片源碼包:6818_kernel_wen.tar.gz,包含交叉編譯工具、kernel源碼、鏡像製作工具。三、源碼編譯過程對於源碼包的編譯,切換到root用戶進行操作。
  • Linux驅動--內核和驅動關係
    嵌入式linux QQ交流群:175159209,歡迎愛好者加入交流技術問題!
  • 嵌入式開發Linux驅動篇——字符設備(步步為營)
    ,發送到開發板,然後安裝,並且傳遞參數my_param到驅動模塊中模塊安裝在位置我們可以通過/sys/module可以看到我們的param_test模塊然後查看裡面的文件權限,就可以和我們之前的S_IRUSR 400對應上了
  • 連載 | 系統學習Linux+Android:bootloader編譯等常見驅動程序編寫、調試學習(三)
    系統單片機開發,過渡到linux arm裸機程序開發。今天再來詳細講解下bootloader編譯(本文以u-boot為例)執行,linux內核原理、根文件系統,以及各類在工作中常見驅動程序編寫、調試方法。
  • 圖解嵌入式Linux應用程式、內核、驅動程序及硬體之間的關係
    在任何一個計算機系統中,大至伺服器、PC機、小至手機、mp3/mp4播放器,無論是複雜的大型伺服器系統還是一個簡單的流水燈單片機系統,都離不開驅動程序的身影,沒有硬體的軟體是空中樓閣,沒有軟體的硬體只是一堆廢鐵,硬體是底層的基礎,是所有軟體得以運行的平臺,代碼最終會落實到硬體上的邏輯組合。
  • 嵌入式Linux設備驅動工作原理的研究
    嵌入式linux QQ交流群:175159209,歡迎愛好者加入交流技術問題!
  • 一個最簡單的linux驅動程序的編譯運行
    嵌入式linux QQ交流群:175159209,歡迎愛好者加入交流技術問題!
  • 【收藏轉發】從串口驅動到Linux驅動,嵌入式入門必備!
    此外Linux還是一種嵌入式作業系統,可以運行在掌上電腦、機頂盒或遊戲機上。2001年1月份發布的Linux 2.4版內核已經能夠完全支持Intel 64位晶片架構。同時Linux也支持多處理器技術。多個處理器同時工作,使系統性能大大提高。
  • [乾貨]手把手教你用Zedboard學習Linux移植和驅動開發
    主要分為兩部分,分別闡述Zedboard中FPGA和處理器互聯總線與硬體設計和Zedboard處理器系統上嵌入式Linux的移植與通過驅動和應用程式簡單配置FPGA寄存器的實現。上次介紹了沒有作業系統下的驅動和應用程式開發,本文介紹帶作業系統的驅動和應用程式開發。
  • 在 21 世紀該怎樣編譯 Linux 內核 | Linux 中國
    計算機需要的是一個驅動程序。內核開發者、硬體製造商、技術支持和愛好者都知道新的硬體會不斷地發布。它們大多數都會貢獻驅動程序,直接提交給內核開發團隊以包含在 Linux 中。例如,英偉達顯卡驅動程序通常都會寫入 Nouveau 內核模塊中,並且因為英偉達顯卡很常用,它的代碼都包含在任一個日常使用的發行版內核中(例如當下載 Fedora 或 Ubuntu 得到的內核)。
  • 嵌入式軟體開發(三)——嵌入式linux系統
    前言:       上一節聊到裸機程序開發,雖然通過一些作業系統的思想可以有條件的實現受限多任務,但裸機程序仍然無法高效的實現多任務處理
  • 【嵌入式Linux開發教程,獨家首發】目錄(初稿)
    在這個教程中,你看不到自我陶醉的炫技,也見不到後期開發中基本用不上的指令,內容通俗易懂,實用夠用為先。本教程凝聚了ZLG致遠電子嵌入式工程師的心血,轉載請【註明出處】,在微信對話框中回復「Linux」就可以看到本書已推送過的所有章節,如果您看完有收穫,請分享到朋友圈。有任何改進建議請直接在微信對話框中告訴小編。
  • Android系統篇之----編寫簡單的驅動程序並且將其編譯到內核中
    但是本文得先介紹一下如何編寫一個簡單的驅動程序,先介紹了驅動程序,然後在通過JNI讓framework層訪問這個驅動程序,在通過註冊服務來封裝這個功能,最後在把這個服務添加到系統中,實現上層應用通過訪問這個服務來操作驅動,當然你必須要掌握和了解 :Android中如何編譯源碼(可以去http://www.wjdiankong.cn 中找到這篇文章)
  • 如何編寫嵌入式Linux設備驅動程序?
    ,設備驅動程序是作業系統內核和機器硬體之間的接口。設備驅動程序為應用程式屏蔽了硬體的細節,這樣在應用程式看來,硬體設備只是一個設備文件,應用程式可以象操作普通文件一樣對硬體設備進行操作。設備驅動程序是內核的一部分,它完成以下的功能:1、對設備初始化和釋放;2、把數據從內核傳送到硬體和從硬體讀取數據;3、讀取應用程式傳送給設備文件的數據和回送應用程式請求的數據;4、檢測和處理設備出現的錯誤。
  • Linux 內核學習:環境搭建和內核編譯
    實際上,選擇哪種發行版都關係不大,發行版之間的差別基本上都是外圍組件,對linux的內核的修改都不會很多。況且我們在學習linux內核,或者開發linux驅動時,一般都是以官方內核(即Linus維護的主線內核)為基準.所以我們搭建好環境後幾乎都是要選擇一個版本的官方內核來重新編繹以備用的。
  • 從串口驅動到Linux驅動模型
    並不是linux下的串口驅動。引入此圖旨在讓讀者感性的認識到串口控制臺的功能是什麼。下面正式開始對串口打開。發送。接收函數的分析。這裡向前引用一個函數。就是linux內核中幾種2440晶片通用的串口發送函數s3c24xx_serial_start_tx。
  • 樹莓派4 嵌入式Linux開發過程詳解
    樹莓派4 嵌入式Linux開發過程詳解1.概述2.開發環境概述3.交叉編譯工具的安裝與uboot的編譯3.1 安裝arm 64位交叉編譯環境3.2 編譯樹莓派上的uboot3.3 將u-boot放到樹莓派上運行4.樹莓派4b上的Linux
  • exFAT 文件系統最新驅動程序已進入 Linux 5.7 內核
    linux QQ交流群:175159209,歡迎愛好者加入交流技術問題!上個月報導過由三星維護的 exFAT 最新驅動程序將會進入 Linux Kernel 5.7,以替代去年在 Linux Kernel 5.4 引入的舊版 exFAT 驅動。從郵件列表可以看到,Linus Torvalds 已將總計七千多行代碼的新版 exFAT 驅動合併進 Linux 5.7 內核。
  • 嵌入式 Linux 的一切,看這一篇就夠了!
    我們常說的嵌入式linux系統,其實與電腦端運行的linux系統本質上是一樣的,都是使用的linux內核,相同的文件系統目錄結構。區別在於嵌入式linux系統多少經過裁剪的,可能在操作時你會發現,有些命令不支持,或者有些命令的個別參數不支持!還有就是內核的功能也有裁剪。
  • Linux驅動實踐:一步一步編寫字符設備驅動程序
    作  者:道哥,10+年嵌入式開發老兵,專注於:C/C++、嵌入式、Linux。關注下方公眾號,回復【書籍】,獲取 Linux、嵌入式領域經典書籍;回復【PDF】,獲取所有原創文章( PDF 格式)。這篇文章,我們繼續這個話題,實際演示一下:字符設備驅動程序的另一套API函數的使用方法。