【linux】驱动-1-环境准备

1.1.2.2 编译内核

编译内核的步骤过程根据不同官方提供的脚步和Makefile不一样而不同。以下为野火的i.M 6U编译linux内核例程。

单独新建一个工作目录,将其内核源码放在该目录下,切换到内核源码目录,找到 make_deb.sh 脚本,修改里面的配置参数,如内核编译位置等等。修改好配置参数后,只需要执行脚本即可编译内核。(其它内核可以参考该脚本,也可以自己手写一个编译脚本)

deb_distro=bionic

DISTRO=stable

build_opts="-j 6"

build_opts="${build_opts} O=build_image/build"

build_opts="${build_opts} ARCH=arm"

build_opts="${build_opts} KBUILD_DEBARCH=${DEBARCH}"

build_opts="${build_opts} LOCALVERSION=-imx-r1"

build_opts="${build_opts} KDEB_CHANGELOG_DIST=${deb_distro}"

build_opts="${build_opts} KDEB_PKGVERSION=1${DISTRO}"

build_opts="${build_opts} CROSS_COMPILE=arm-linux-gnueabihf-"

build_opts="${build_opts} KDEB_SOURCENAME=linux-upstream"

make ${build_opts}  npi_v7_defconfig

make ${build_opts}

make ${build_opts}  bindeb-pkg

O=build_image/build:指定编译好的内核放置的位置。

ARCH=arm:目标是 ARM 体系结构内核。

KBUILD_DEBARCH=${DEBARCH}:对于deb-pkg目标,允许覆盖deb-pkg部署的常规启发式。

LOCALVERSION=-imx-r1:使用内核配置选项 "LOCALVERSION" 为常规内核版本附加一个唯一的后缀。

KDEB_CHANGELOG_DIST=${deb_distro}:

KDEB_PKGVERSION=1${DISTRO}:版本信息。

CROSS_COMPILE=arm-linux-gnueabihf-:指定交叉编译器。

KDEB_SOURCENAME=linux-upstream:KDEB_SOURCENAME make变量仅控制已打包的源tarball的名称,并不影响bind -pkg和deb-pkg输出的.deb包名称。

make ${build_opts} npi_v7_defconfig:生成配置文件。

make ${build_opts} bindeb-pkg:编译文件进行打包。

1.2 内核驱动模块编译和加载

hello 例程可以去 李柱明的gitee clone: demo_code_for_mystudy/linux/driverTest/helloModule

1.2.1 hello 例程分析

这只是一个模块例程,不含驱动部分

必须内容可分为以下几点:

入口函数

出口函数

协议

hello_module.c

/** @file hello_module.c

* @brief 简要说明

* @details 详细说明

* @author lzm

* @date 2021-02-21 18:08:07

* @version v1.0

* @copyright Copyright By lizhuming, All Rights Reserved

*

**********************************************************

* @LOG 修改日志:

**********************************************************

*/

#include <linux/module.h>

#include <linux/init.h>

#include <linux/kernel.h>

// 入口函数:安装驱动时调用的函数

static int __init hello_init(void)

{

printk(KERN_EMERG "[ KERN_EMERG ] Hello Module Init\n");

printk( "[ default ] Hello Module Init\n");

return 0;

}

// 出口函数:卸载驱动时调用的函数

static void __exit hello_exit(void)

{

printk("[ default ] Hello Module Exit\n");

}

module_init(hello_init);

module_exit(hello_exit);

//MODULE_LICENSE("GPL2");

MODULE_AUTHOR("embedfire ");

MODULE_DESCRIPTION("hello world module");

MODULE_ALIAS("test_module");

1.2.2 和内核源码一起编译

1.2.3 加载内核驱动模块

编译好得到的内核驱动模块 xx.ko 可以通过多种方式拷贝到 ARM 板上,如NFS网络文件系统、SCP命令得到。

挂载方法可以参考李柱明博客园NFS篇章。

1.3 设备树编译和加载

设备树是在 Linux3.x 才引入的,用于描述一个硬件平台的板级细节。

本系列笔记的驱动例程如无特殊说明,都是依赖于设备树的。

下面简略演示设备树的编译和加载,具体原理由具体篇章说明。

1.3.1 设备树编译

1.3.1.1 使用内核中的dtc根据编译

编译后的内核会自动生成 dtc 工具。其路径是:内核/scripts/dtc/dtc。

编译命令:内核构建目录/scripts/dtc/dtc -I dts -O dtb -o xxx.dtbo xxx.dts

意为编译 dts 为 dtb

1.3.1.2 在内核源码中编译(推荐)

编译内核时都会自动编译设备树,此时,只需要把设备树源文件放到规定位置即可,设备树源文件、编译生成的设备树文件及我们所用到的设备树文件都会存放在 内核源码/arch/arm/boot/dts 里面。但是,编译内核耗时长,所以,推荐只编译设备树,方法如下:

两条命令都在内核源码顶层路径下执行(其实就是利用顶层Makefile):

如果在内核源码中执行了 make distclean ,则必须执行第一条命令来生成默认的配置文件。

make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- npi_v7_defconfig

make ARCH=arm -j4 CROSS_COMPILE=arm-linux-gnueabihf- dtbs

1.3.1.3 加载设备树

替换设备树的方法:

第一种:设备树是编译到内核中的,所以,重新编译内核,重新制作镜像即可。(麻烦,不推荐)

第二种:将编译好的设备树或设备树插件替换到开发板里面的。(推荐)

第三种:将编译好的设备树放到开发板中,**/boot/dtbs/xxx/,修改boot启动参数。(推荐)

查看是否加载成功:

进入 /proc/device-tree 目录下查看已加载的设备节点,看看有没有改动。

1.4 设备树插件的编译和加载

Linux4.4 以后引入了动态设备树,设备树插件被动态的加载到系统中,供内核识别。

设备树插件一般用于只修改添加部分硬件信息。如只添加 RGB 灯的硬件信息,就只需要编译 RGB 灯的 .dts 文件为 .dtbo 即可。

编译设备树插件的时候,无需重新编译整个设备树插件,只需要编译修改的部分即可。

1.4.1 单独使用dtc工具编译

设备树和设备树插件都是使用 DTC 编译工具编译。

设备树编译后得到的是 .dtb 文件;

而设备树插件编译后得到的是 .dtbo 文件。

使用野火提供的一键式编译工具:

地址:git clone https://gitee.com/Embedfire/ebf-linux-dtoverlays.git

要编译的设备树插件源文件放在 ebf-linux-dtoverlays/overlays/ebf 目录下, 然后回到编译工具的根目录 ebf-linux-dtoverlays/ 执行“make”即可。

生成的.dtbo位于 ~/ebf-linux-dtoverlays/output 目录下。

需要注意的是,如果你在执行“make”后出现报错,可以尝试先卸载device-tree-compiler(卸载命令为:“sudo apt-get autoremove device-tree-compiler”), 重新安装,然后在“ebf-linux-dtoverlays/basic/fixdep文件的权限, 修改权限命令为:“chmod 777 scripts/basic/fixdep”。

USB Microphone https://www.soft-voice.com/

Wooden Speakers  https://www.zeshuiplatform.com/

亚马逊测评 www.yisuping.cn

深圳网站建设www.sz886.com

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,098评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,213评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,960评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,519评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,512评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,533评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,914评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,574评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,804评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,563评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,644评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,350评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,933评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,908评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,146评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,847评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,361评论 2 342

推荐阅读更多精彩内容

  • 驱动: 必做实验一、二、四、五、十一 十天: 模块、字符设备框架以及接口、led驱动 platform总线 原子操...
    ibo阅读 358评论 0 0
  • 大家好,从本篇起,一口君将手把手教大家如何来学习Linux驱动,预计会有20篇关于驱动初级部分知识点。本专题会一直...
    一口Linux阅读 555评论 0 0
  • 大家好,从本篇起,一口君将手把手教大家如何来学习Linux驱动,预计会有20篇关于驱动初级部分知识点。本专题会一直...
    一口Linux阅读 523评论 0 0
  • 一、Linux内核简介 1.宏内核与微内核 内核分为四大类:单内核(宏内核);微内核;混合内核;外内核。 宏内核(...
    Mr_Michael阅读 1,746评论 0 2
  • Linux 对大多数的驱动作了分类:块设备驱动、网络驱动、I 2 C 驱动、USB 驱动、SPI 驱动、音频驱动等...
    不配野心阅读 2,973评论 0 0