首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

将hello程序作为驱动程序编译进系统内核

0x00开始 恩,可能是我比较愚钝,一个内核编译搞了一天,各种问题,各种bug,几度无奈,也是因为我突发奇想,并没有按照原来的那种操作,我直接把helloworld程序放到内核模块中编译成了一个驱动程序...好了,废话不多说,直接开始还原我的helloworld驱动内核程序编译流程。...0x01下载内核并解压 编译内核,首先要做的就是有一个内核能够供你编译,我选择的操作系统是Ubuntu14.04,低版本的系统的编译难度要小很多,所以当然要选个简单的了。...此时的驱动程序的编译取决于一个特殊配置 CONFIG_HELLOWORLD配置选项。...0x04 开始编译整个内核 使用命令:make -j2 , 2代表的是编译的速度,为了加快速度,我们这里选择2,你可以自行选择,但也不要太高。

1.5K30
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Linux驱动实践:带你一步一步编译内核驱动程序

    目录 学习的困惑 实践环境 编译内核 编译驱动模块 资料下载 别人的经验,我们的阶梯! 大家好,我是道哥。今天给大家分享一些笔记本里的一些存货: Linux 系统中的驱动和中断相关。...实际操作一下:如何把一个最简单的驱动程序(hello),按照 2 种方式进行编译编译内核; 编译为一个独立的驱动模块; 实践环境 为了便于测试,以下操作都是在 Ubuntu16.04 操作系统里完成的...编译Linux驱动程序,肯定需要内核源码,这里选择的是 linux-4.15 版本,可以在官网下载。 文末有下载方式。...最后一行的 default y ,就表示把 CONFIG_HELLO 的值设置成 y,从而让这个驱动编译内核中。...现在,hello驱动程序的Makefile已经创建好了,我们还要让linux内核编译框架知道这个文件才行。

    3.2K30

    【Linux 内核编译 Linux 内核 ⑤ ( 查看 .config 编译配置文件 | 正式编译内核 )

    文章目录 一、查看 .config 编译配置文件 二、正式编译内核 一、查看 .config 编译配置文件 ---- 在上一篇博客 【Linux 内核编译 Linux 内核 ④ ( 打开 Linux...内核编译 菜单配置 |菜单配置中的光标移动与选中状态 | 保存配置 | 配置项帮助文档 ) 中 , 已经将编译配置保存到了 .config 文件中 ; 查看 .config 编译配置文件 , 在 linux...内核源码根目录中 , 执行 gedit .config 命令 , 查看 .config 编译配置文件 : ( 也可以使用 vi , vim 等文本编辑器查看 ) 在 .config 配置中 , #...CONFIG_PREEMPT_VOLUNTARY=y # CONFIG_PREEMPT is not set # # CPU/Task time and stats accounting # 二、正式编译内核...---- 在 Linux 内核源码根目录 , 执行 sudo make j4 开始编译 Linux 内核 ;

    12.2K40

    【Cubieboard2】配置编译内核支持SPI全双工通信驱动

    1,cubieboard2 A20系列,无论是官方还是社区的系统,默认都是不支持SPI总线驱动的。需要重新编译配置内核,修改文件才能支持SPI全双工通信。...本文以Cuieboard2 Debain为例,进行讲解; 2,重新编译配置内核 (1)先去官网下载对应版本的linux内核源码,地址:https://github.com/linux-sunxi/linux-sunxi...N select DDMA mode 6、在根目录下,输入 vim .config 加入或修改如下内容: CONFIG_SPI_SUN7I=y CONFIG_SUN7I_SPI_NDMA=y 7、编译内核...//pabort("error"); } else pr_debug("SPI - LookBack Mode OKn"); } return ret; } 上面两项都测试通过了,那么你的SPI内核驱动已经完成了...剩下的就是根据需求编写用户态驱动了;(很简单,就是跟操作文件一样) 4、注意事项: (1)如果你的Cubieboard2 Debian是从NAND启动的,那么在重新编译内核的时候需要增加NAND的驱动支持

    95420

    vs2019 内核驱动编译失败:网络共享盘问题

    怀念2008 我以为这个年代了,中文路径问题应该解决了,记得vs 2008写c的时候曾因中文路径的问题导致编译不通过,从2015版本开始发现有时候项目名称和路径里包含中文也可以编译通过了,习惯之后后面所有的编译报错问题很难再去想到中文路径上去...一次在编译内核文件的时候,发现总是编译失败,起初有一些常见的错误,例如inf文件校验,通过修改项目属性解决之后没有任何的报错,依然编译失败,没有报错的error是最气人的。...1>Z:\项目\C\内核驱动编程\testDriver\testDriver.inf : error 1299: Additional validation checks skipped due to...但是呢,将项目移动到Z盘,所有路径改成英文的,编译仍然失败: ? 那看来不是中文路径的问题了,是我错怪了时代的发展。...这样的话,我大概知道是什么问题了,Z盘是我挂载的网络共享盘,磁盘格式既不是NTFS也不是FAT32,换成本地磁盘后编译通过。

    84610

    内核源码编译

    编译内核的目的在于把纷繁复杂的内核源码编译成一个可执行的镜像文件。当然,内核功能复杂,并不是所有的 功能都需要用到,所以,我们在使用make对其编译前,要做一件事——配置。...kconfig对内核进行配置,告诉make,哪些功能需要编译内核,哪些功能要作为模块编译,make便根据配置文件来进行编译。...###编译步骤 获取内核源码(这几天kernel.org被黑了,该步骤方法暂时用不了): 1、使用git工具: ubuntu下安装git: sudo apt-get install git 使用git检出...make allmodconfig :尽可能多地编译内核模块配置的结果是产生.config文件 make oldconfig :如果你有.config文件,你就可以使用。...安装 make module_install:将编译生成的内核模块复制到/lib/modules/目录中去。

    1.8K70

    Linux内核驱动编写

    # 前言 开发过单片机的小伙伴可以看一下我之前的一篇文章从单片机开发到linux内核驱动,以浅显易懂的方式带你敲开Linux驱动开发的大门。...# 正文 用户空间的每个函数(用于使用设备或者文件的),在内核空间中都有一个对应的功能相似并且可将内核的信息向用户空间传递的函数。 下表为几种设备驱动事件和它们在内核和用户空间对应的接口函数。...这个函数工作在内核空间,用于为该驱动程序的缓冲区分配内存。 * 它和我们熟悉的malloc函数很相似。 * 最后,如果注册主设备号或者分配内存失败,模块将退出。...在内核维护的设备和驱动列表中寻找你在驱动模块中注册的设备和驱动。...debug: 编译驱动出现: warning: initialization from incompatible pointer type assignment discards ‘const’ qualifier

    7.2K21

    内核驱动注册流程

    1.申请设备号 驱动结构体填充完毕后,需要注册到内核之中,其中有三种方法来注册设备驱动: (1) 动态注册申请设备号 + cdev 注册设备驱动 在不知道设备号的情况下,...通过动态注册驱动申请到的设备号并存到dev_t 类型中,通过cdev_init将驱动结构体ops赋值给cdev->ops,然后通过cdev_add将cdev结构体与设备号关联。..., unsigned baseminor, unsigned count, constchar *name) dev: alloc_chrdev_region函数向内核申请下来的设备号结构体...cdev卸载API: void cdev_del(structcdev *p) (2) 静态申请设备号 + cdev 注册设备驱动 在已知驱动主设备号的情况下,可以通过静态注册驱动。...在设备节点创建成功后,内核就会在/dev/下生成设备名。其中/dev/下存的是真实的设备,/sys/class/xx/存的是设备节点名,反映驱动设备的层次。

    1.1K10

    驱动开发:内核运用LoadImage屏蔽驱动

    在笔者上一篇文章《驱动开发:内核监视LoadImage映像回调》中LyShark简单介绍了如何通过PsSetLoadImageNotifyRoutine函数注册回调来监视驱动模块的加载,注意我这里用的是监视而不是监控之所以是监视而不是监控那是因为...节点,该节点里面就是被加载驱动入口,通过汇编在驱动头部写入ret返回指令,即可实现屏蔽加载特定驱动文件。...原理其实很容易理解,如果我们需要实现则只需要在《驱动开发:内核监视LoadImage映像回调》这篇文章的代码上稍加改进即可,当检测到lyshark.sys驱动加载时,直接跳转到入口处快速写入一个Ret让驱动返回即可...,至于如何写出指令的问题如果不懂建议回头看看《驱动开发:内核CR3切换读写内存》文章中是如何读写内存的,这段代码实现如下所示。...FullImageName, szFullImageName);if (strstr(_strlwr(szFullImageName), "lyshark.sys")){DbgPrint("[LyShark] 拦截SYS内核模块

    1.3K20

    内核驱动驱动对象 Driver_OBJECT

    目录 驱动对象讲解 一丶驱动对象 1.1 结构 1.2 输出代码输出基本的驱动对象信息 1.3 结果 1.4 其它简介 驱动对象讲解 一丶驱动对象 1.1 结构 在内核中....每一个驱动模块都是一个驱动对象. 都有一个 DRIVER_OBJECT结构体代表. 可以想象成驱动对象是一个进程容器. 容纳百川. 下面针对驱动对象做一下简单的成员输出.以熟悉驱动对象....; //驱动对象结构.可以解析为_LDR_DATA_TABLE_ENTRY 是一个链表存储着下一个驱动对象...\r\n"); DbgPrint("驱动名字 = %wZ \r\n", DriverObject->DriverName); DbgPrint("驱动起始地址 %x 大小 %x 结束地址 %x\r...1.4 其它简介 利用驱动对象可以 遍历驱动的信息.得出内核中所有模块 代码在另一个帖子 https://www.cnblogs.com/iBinary/p/11693606.html 可以集成到

    1.5K10

    【Linux 内核编译 Linux 内核 ⑥ ( 安装 OpenSSL | 安装其它依赖库 | 内核编译完成 )

    文章目录 一、安装 OpenSSL 二、安装其它依赖库 三、Linux 内核编译完成 一、安装 OpenSSL ---- 参考 【错误记录】编译 Linux 内核报错 ( fatal error: openssl.../opensslv.h: No such file or directory ) 博客 , 编译内核时 , 由于没有安装 OpenSSL 报错 ; 执行 sudo apt-get install libssl-dev...Setting up libssl-doc (1.0.2g-1ubuntu4.20) ... root@ubuntu:~/kernel/linux-5.6.14# 二、安装其它依赖库 ---- 编译...kernel-package libssl-dev kernel-source-** libc6-dev tk8.* fakeroot bin86 命令 , 安装上述 9 个依赖库 ; 三、Linux 内核编译完成...---- 在 Linux 内核源码根目录中 , 执行 sudo make 命令 , 等待几小时后 , 在最后打印出如下内容 , 期间没有报错 , 即表示编译完成 ;

    22.5K40

    centos内核编译配置

    用于校验类似于MD5 patch 是补丁包 2.解压文件到/usr/src/目录下: xz -d 文件名.tar.xz 二次解压:tar -zxvf 文件名.tar 3.如果是第一次编译内核...,并没有上次的残留文件可以可以跳过: make mrproper make clean 删除大多数的编译生成文件, 但是会保留内核的配置文件.config, 还有足够的编译支持来建立扩展模块...make mrproper 删除所有的编译生成文件, 还有内核配置文件, 再加上各种备份文件 make distclean mrproper删除的文件, 加上编辑备份文件和一些补丁文件。...4.这时候不要急着去做make,因为编译内核需要ngcc命令,所以先安装ngcc模块,选择最简单的yum安装以下两个包: yum -y install gcc yum install ncurses...7.安装内核 make install(由于有一些模块在编译中失败,所以会出现找不到模块的错误,不过如果不是重要的可以忽略) 8.修改默认启动的内核(把光标处的default值改成0,就为默认启动,编译成功后默认为

    1.8K10

    怎么编译Linux内核

    编译内核镜像 不同的开发板对应不同的配置文件,配置文件位于内核源码arch/arm/configs/目录。...,编译完成 uImage 后才可编译设备树文件,如果你觉得编译速度很慢可以加 -j来使用并行任务编译,如下图加 -j8 参数使用 8 个并行任务来编译内核编译速度视性能而言,i7 9700F...编译完成后生成的文件如下图所示 编译完成后,在arch/arm/boot目录下生成uImage内核文件, 在arch/arm/boot/dts目录下生成设备树 的二进制文件stm32mp157c-...编译内核模块 无论是哪个版本的STM32MP157开发板,编译内核模块的命令是一样的。...STM32MP157全功能版 进入内核源码目录后,就可以编译内核模块了: book@100ask:~/100ask_stm32mp157_pro-sdk/Linux-5.4$ make ARCH=arm

    10K20

    Android Linux内核编译

    ,设置工具链路径,为编译内核方便: export PATH=$PATH:/root/work/android/android-5.0/prebuilts/gcc/linux-x86/arm/arm-eabi...-4.8/bin 编译内核: 下载内核后,解压 root@ubuntu:~/work/android/android5/goldfish# git branch -a master remotes/origin...3.4(可以用模拟器自带的内核启动一个模拟器,然后看一下内核版本 cat /proc/version ), 所以我们也是用3.4: root@ubuntu:~/work/android/android5...= arm-eabi- 配置内核 root@ubuntu:~/work/android/android5/goldfish# make goldfish_armv7_defconfig 注意:这个默认的内核并没有配置模块加载功能...,需要执行make menuconfig设置,否则无法编译和加载内核模块 编译内核 make zImage -j2 用我们编出的内核启动模拟器: root@ubuntu:~/work/android/android5

    4.9K30

    linux内核编译详解

    新的内核修订了旧内核的bug,并增加了许多新的特性。如果用户想要使用这些新特性,或想根据自己的系统定制一个更高效、更稳定的内核,就需要手动编译Linux内核。那么如何编译内核呢?...本文将讲解Linux内核编译的详细程。 内核编译内核获取 编译内核的前提是需要有新内核的源码包,获取源码包的渠道有很多,这里就不详细介绍了,建议直接去官方网站(www.kernel.org)下载。...内核编译之配置内核 编译内核首先需要安装开发环境(Development Tools和Server Platform Development),配置内核之前可以查看当前系统的设备信息,了解系统详细配置。...内核编译编译安装 编译时如果是远程连接,一旦断开连接,编译就会出问题。所以我们可使用screen命令(需安装),启动多个窗口,即使连接中断,编译也不会终止。...配置文件,会发现新内核的信息已经写入了 以新内核启动 查看新内核版本 补充: 如果前面多次编译过,在编译开始之前可进行清理 1 2

    6.2K20
    领券