ubuntu 14.04 64位hello world驱动

ubantu14.04 32位下第一个hello world驱动程序 ubantu14.04 32位下第一个hello world驱动程序 平台:ubantu14.04,内核版本: 3.13.0-32-generic 编写驱动程序时,首先必须建立内核源码树,内核源码树我现在的理解就是整个linux内核源代码编译后的形式,即下载源码后,执行make编译后的形式,它是编译驱动的前提。ubuntu系统默认情况下是没有的。先前的内核只需要有一套内核头文件 阅读详情

一、环境及版本

主机:vmware虚拟 ubuntu 14.04 64bit

内核版本:3.16.0-30-generic

二、思路介绍

linux下驱动以模块的方式挂载,进而让程序调用。本文也就是一步步生成这个被挂载的模块。此模块以.ko结尾。

三、实现步骤

a、构造内核源码树

先得查看本机的内核版本号,然后下载对应版本的源代码,构造源码树,否则模块无法挂载

1.查看本机版本

$uname -r

2.下载相应内核源码包

$sudo apt-get install linux-source-3.13.0

上图左侧两个为系统原有文件夹,*.tar.bz2为下载后的源码包

3.解压源码包

$tar jxvf linux-source-3.13.0.tar.bz2
解压完成后将生成上图中 /usr/src/linux-source-3.13.0目录

4.编译配置

$sudo make oldconfig
中间选项随意,反正本次hello world都是用不上的

5.编译生成

$ sudo make bzImage
执行后,应有文件

6.生成module【可不执行】

$ sudo make modules

7. 生成module_install【可不执行】

$ sudo make modules_install

至此源码树构建完成

b、编写驱动文件

8.hello.c

可以在本用户目录下创建文件,位置无关

$ vim hello.c

#include <linux/init.h> 
#include <linux/module.h> 
MODULE_LICENSE("Dual BSD/GPL"); 

static int hello_init(void) 
{ 
printk(KERN_ALERT "Hello, world\n"); 
return 0; 
} 
static void hello_exit(void) 
{ 
printk(KERN_ALERT"Goodbye, cruel world\n"); 
} 


module_init(hello_init); 
module_exit(hello_exit); 

c、编写Makefile

9.Makefile

在与hello.c同目录下创建Makefile

$ vim Makefile

obj-m := hello.o 
#KERNELDIR := /lib/modules/3.13.11-ckt36/build
KERNELDIR := /lib/modules/3.16.0-30-generic/build
PWD := $(shell pwd) 


modules:
	$(MAKE) -C $(KERNELDIR) M=$(PWD) modules
modules_install:
	$(MAKE) -C $(KERNELDIR) M=$(PWD) modules_install

d、测试

10.生成模块

在hello.c目录下执行

$ sudo make

同目录下应有如下文件


11.挂载模块

$ sudo insmod ./hello.ko
无返回信息输出则说明正常

12.查看模块

$ lsmod |grep hello
$ cat /var/log/syslog | grep world
将返回相关结果
13.卸载模块

$ sudo rmmod hello
此时再使用lsmod | grep hello将不再有返回

日志中将记录hello模块退出信息

到此hello world全程完成

四、参考文章

基于linux2.6【http://blog.youkuaiyun.com/xiao229404041/article/details/6956099】

基于linux3.13 【http://blog.youkuaiyun.com/damotiansheng/article/details/44463193】

相关原理介绍【http://blog.chinaunix.net/uid-26833883-id-4366882.html】

五、相关书籍

1.【Linux设备驱动开发详解-宋宝华】

2.【跟我一起写Makefile】

3.【Linux1.0核心游记】

Docker Hello World 验证全链路解析:从拉取到执行的四大关键环节 Docker 容器技术的核心在于运行时环境的可靠初始化与隔离执行机制。其本质是客户端通过 Unix Socket 与守护进程通信,调用 runc 运行时在 Linux namespace 和 cgroups 中启动进程。hello-world 镜像作为最小验证载体,以静态二进制、无依赖、瞬时退出为特征,精准暴露 Docker 安装链路上的四大关键环节:守护进程就绪性、镜像拉取通路、容器运行时加载、标准输出透传能力。它不仅是入门第一步,更是 DevOps 环境标准化、CI/CD 流水线稳定性及本地与生产环境一 阅读详情

相关推荐

手把手教你用QEMU模拟器运行第一个RISC-V程序(RV64GC Ubuntu环境)

本文详细介绍了如何使用QEMU模拟器在x86电脑上搭建RISC-V开发环境,从工具链安装到运行第一个Hello World程序。通过实操步骤,帮助开发者快速掌握RV64GC架构的交叉编译和调试技巧,无需依赖真实硬件即可体验RISC-V指令集的开发流程。

weixin_30859423的博客 480

在Ubuntu上运行Hello World驱动

Ubuntu上运行hello world驱动

goddpupil的博客 1241

UBUNTU14.04下helloworld内核驱动源文件与makefile

不管 有没有人下载,这个我成功了,zip里面有源码与makefile 查看输出的数据请输入dmesg

Ubuntu 14.04上驱动开发环境配置,及最简单一个驱动编写。

开发ubuntu 14.04 本机使用的驱动程序。 安装开发工具: * apt-get install build-essential 建2个文件: 最简单的驱动代码 Hello.c /*0 * hello.c * * Created on: May 14, 2015 * Author: neo */ #include "linux/init.h

bugonline的专栏 4960

三维视觉智能焊接系统:免示教技术的工业应用实践

本文深入探讨了三维视觉智能焊接系统中免示教技术的工业应用实践。该系统通过三维视觉相机实时扫描工件,自动识别焊缝并生成轨迹,将产线换型时间从数小时缩短至几分钟,显著提升了生产柔性。文章详细解析了其核心硬件、算法及工厂部署流程,并展望了与数字孪生、工艺智能化融合的未来趋势。

weixin_29091105的博客 432

FPGA—ZYNQ_BD Block Design学习(一)

1.第一步:打开Vivado软件,创建或打开一个工程。2.第二步:在Block Design中添加arm核心,并将其配置为IP核。3.第三步:配置arm核心的外设信息,如DDR接口、时钟频率、UART接口等。4.第四步:完成Block Design中的模块互联,生成PL端的比特流。 5.第五步:导出PS端的硬件信息,包括arm IP核的外设、速度、引脚和地址等信息。1创建bd 需要有ddr以及uart和时钟配置外设io口,这里就是zynq的管脚规定好的,根据原理图用哪个个勾选哪一个。 对外设uart的配

m0_58129662的博客 1028

Ubuntu下Hello World驱动实现全过程

今天是一个值得纪念的日子,我也不知道我花了多长时间才编译成功!在编写这个驱动的过程中,真的体会到驱动编程不是那么简单的~,现在有点小小的激动,真的,很不容易啊~我把整个过程在重复一遍吧! 在编写这个驱动的过程中参考了网上的很多文档,最终的结果是弄的我头都晕了,每个人写的都不一样,其实我现在还有一些概念不是很清楚。 1:到底丫的什么是内核源码树? 2:为什么要编译内核源码树?

bytxl的专栏 2911

app逆向分析案例-95分

先把justtrusmeplus打开设置好95分,开始抓包,得到结果为: https://www.95fenapp.com/api_goods/list/v3.0?is_all=1&keywords=%E7%A7%91%E6%AF%94& page=1&page_size=20 &publish_timestamp=0 &scene=2&scene_type=95fen_android_search_personal&sn=SearchList

weixin_41763171的博客 2742

ubuntu 调试HelloWorld 驱动

先查看自己OS使用的内核版本 shana@shana:~$ uname -r 2.6.22-14-generic           /*  这是我显示的结果 */ 如果安装系统时,自动安装了源码。在 /usr/src 目录下有对应的使用的版本目录。例如下(我是自己下的) shana@shana:/usr/src$ ls linux-headers-2.6.22-14 linux-he

xiao229404041的专栏 2312

解决com.kingbase8.util.KSQLException: This _connection has been closed.

一个消息管理系统,系统采用kingbase8数据库,数据库采用单体模式,后台应用也采用springboot单体模式。系统正式上线后,出现几个JDBC响应的异常信息: com.kingbase8.util.KSQLException: An I/O error occurred while sending to the backend. java.net.SocketTimeoutException: Read timed out.

qq_38127559的博客 2757

QT/C++实现健壮HTTP POST客户端:从基础到异常处理与性能优化

HTTP协议作为客户端与服务器通信的基石,其POST方法在数据提交、API交互等场景中扮演着核心角色。其工作原理基于请求-响应模型,通过封装TCP连接与协议细节,为应用层提供了简洁的数据传输接口。在C++桌面与嵌入式开发中,直接使用底层Socket实现HTTP不仅复杂且易出错,而利用框架进行高级封装能显著提升开发效率与代码健壮性。QT框架的`QNetworkAccessManager`等组件正是为此设计,它通过信号槽机制提供异步网络编程模型,有效管理连接与协议解析。一个健壮的HTTP客户端需要妥善处理网络波

weixin_29176179的博客 384

64位Ubuntu14.04系统下加载内核模块hello world

[转载至](https://blog.csdn.net/lucien_zhou/article/details/71274447) 64位Ubuntu14.04系统下加载内核模块hello world ...

苏木的博客 419

AIGC实战——基于Transformer实现音乐生成

Transformer 是最流行的音乐生成技术之一,因为音乐可以视为一个序列预测问题,Transformer 模型将音符视为一个个符号的序列(类似于句子中的单词),从而用于生成音乐。Transformer 模型基于先前音符预测下一个音符,生成音乐作品。在本节中,将学习如何处理音乐数据,并应用 Transformer 生成与给定训练集风格相似的音乐。

盼小辉丶的博客 1万+

树莓派驱动——hello world

文章目录开发环境树莓派查看内核版本PC下载树莓派内核下载交叉编译工具Tools把交叉编译工具路径加入到环境变量编译树莓派内核编写驱动程序测试 开发环境 PC: Ubuntu 14.04.6 LTS (GNU/Linux 4.4.0-142-generic x86_64) 树莓派: Linux raspberrypi 4.19.118-v7+ #1311 SMP Mon Apr 27 14:21:24 BST 2020 armv7l 树莓派查看内核版本 wyj@raspberrypi:~ $ uname -a

WuYujun's blog 2319

LVGL(lv_table)

LVGL中的lv_table是一个轻量级表格控件,用于显示行列式文本数据。它支持设置单元格内容/样式、行列调整、事件响应等基础功能,适用于参数配置、数据展示等场景。通过API可快速创建表格,设置行列数、填充数据,并自定义对齐方式与样式。但需注意默认无滚动条、行数限制等问题。该控件适合简单表格需求,复杂交互需结合自定义事件处理。

m0_49476241的博客 1263

AI测试入门:如何测试AI对话模型/智能体?「详细介绍」

作为测试人员,我们需要掌握特定的技能和方法来有效地测试这些复杂的AI对话模型和智能体。传统的软件测试方法在这里可能不再完全适用,我们需要开发新的测试策略和技术来应对AI系统的独特特性。在这篇文章中,我们将深入探讨如何测试AI对话模型和智能体。

blues_C的博客 6859

Linux内核模块下载到板子,64位Ubuntu14.04系统下加载内核模块hello world

1.感谢这篇文章,让折腾了好久的我实现了内核模块加载2.为什么要构造源码树?我们做 Linux 开发一般是在PC机上编译好,下到板子上去运行,板子上的 Linux 内核和 PC 机上的 Linux 版本很多时候都是不一样的,比如:pc机上的是 Linux 2.6,板子上的系统是 Linux 3.1,这个时候就要在pc本地编译环境中下载 Linux 3.1 的内核,用它编译出驱动模块,从而在板子上加...

weixin_30800615的博客 685

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

Chef 12 在 Ubuntu 14.04 的生产级部署与配置管理实践

配置管理是实现基础设施即代码(IaC)的核心能力,其本质是通过声明式语言定义系统期望状态,并由客户端持续校验与自愈。Chef 作为早期成熟的配置管理工具,以 Ruby DSL 和服务端集中管控模型奠定了现代自动化运维的思想基础。在老旧但关键的 Ubuntu 14.04 环境中,Chef 12 不仅具备长期验证的稳定性,更提供对内核模块、udev 规则、init 系统等底层资源的精确控制力——这使其成为金融、电力、制造等行业遗留系统合规纳管不可替代的技术方案。本文聚焦 Chef 12 与 Ubuntu 14.

weixin_34194359的博客 611

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

Ubuntu 14.04上用Rancher稳定部署Jenkins的实战方案

Jenkins作为主流CI/CD引擎,其容器化部署依赖Docker环境隔离与编排平台调度能力;Rancher 1.x凭借轻量级Cattle引擎和成熟Catalog生态,成为老旧系统(如Ubuntu 14.04)下实现Jenkins服务化、可声明化管理的关键桥梁。该方案规避Kubernetes高内核要求,锁定Docker 1.12.6与Rancher Server v1.6.30组合,在受限环境中保障构建环境一致性、插件源可用性及Docker-in-Docker调用稳定性。适用于旧服务器复用、离线CI沙箱搭建

android_mylove的专栏 316

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

Ubuntu 14.04 命令行速查工具 cheat 实战指南

Linux 命令行是强大而碎片化的交互环境,其核心价值在于可组合性与确定性,但高频命令如 apt-get、find、sed 的参数繁多、易忘易错,导致大量时间消耗在文档检索与试错上。cheat 工具基于 Python 实现,本质是轻量级、离线、场景化命令模板库,它不替代 man 手册,而是对高频操作进行信息降噪与即用封装,显著降低认知负荷。在 Ubuntu 14.04 这类长期稳定(LTS)系统中,cheat v2.x 因兼容 Python 2.7.6、零 pip 依赖、纯文本速查表等特性,成为运维与嵌入式

weixin_30607659的博客 427

Ubuntu 14.04下HHVM+Nginx高性能部署实战

FastCGI 是 Web 服务器与应用运行时通信的核心协议,其性能表现直接受传输层机制影响。Unix socket 因零拷贝和内核路径优化,在高并发场景下显著优于 TCP 回环;而 JIT 编译技术则通过将动态语言字节码实时转为机器码,大幅提升 PHP 类脚本的执行效率。这两项关键技术共同构成了 LEMP 栈性能优化的关键支点——不仅支撑了 Facebook 千亿级请求的稳定交付,也持续影响着现代 PHP 运行时(如 PHP 8 的 OPcache JIT)与 Web 服务架构设计。本文聚焦于 Ubunt

weixin_30570101的博客 401

Ubuntu 12.10 64位下手动部署JBoss AS 7.1.1实战指南

JBoss(现WildFly)是Java EE应用服务器的经典代表,其模块化架构与OSGi兼容设计深刻影响了现代微服务容器演进。在Linux系统中,JBoss依赖JDK、glibc、DNS解析机制及内核参数等底层组件协同工作,任一版本错配都可能导致启动失败或运行时异常。尤其在老旧发行版如Ubuntu 12.10上,APT源失效、OpenJDK 7缺失、glibc 2.15兼容性问题和HornetQ持久化缺陷构成典型技术断层。本文聚焦真实遗留系统复现场景,覆盖JDK手动安装、JBoss二进制可信验证、七处关键

weixin_30721077的博客 344

ROS Indigo环境配置深度指南:Ubuntu 14.04兼容性与可诊断构建

ROS(Robot Operating System)作为机器人开发的核心中间件,其环境配置远非简单安装可涵盖。理解ROS构建原理、依赖管理与跨版本兼容性,是保障系统稳定运行的基础。ROS Indigo作为首个长期支持的catkin成熟版本,深度绑定Ubuntu 14.04、C++11标准及特定ABI(如libstdc++.so.6.0.18),对Python 2.7.6、OpenCV 2.4.8、Qt4.8.6等组件存在硬性约束。这种强耦合特性使其在工业AGV维护、经典SLAM论文复现及ROS构建哲学学习

weixin_30357231的博客 316

Ubuntu 14.04服务器初始配置:sudo权限、SSH加固与旧源适配

Linux服务器初始配置是构建安全基线的第一步,其核心在于权限控制、远程访问安全与软件依赖管理。基于传统Unix权限模型,sudo通过setuid机制实现最小特权管理,避免root直连带来的爆破风险;SSH配置需关闭密码认证、禁用DNS反查并更新密钥交换算法,以兼容现代客户端如VS Code Remote-SSH;而Ubuntu 14.04因已终止支持,必须切换至old-releases源并手动处理包名变更与内核头文件匹配问题。这些实践不仅适用于遗留系统维护,更是理解Linux安全演进与运维可靠性的关键入口

weixin_34208283的博客 477

Ubuntu 20.04系统安装后的完整配置指南

Linux系统安装后的基础配置是提升开发效率的关键步骤。通过系统更新与源配置可以确保软件包的最新状态,而显卡驱动安装则直接影响图形性能表现。在开发环境搭建环节,Docker容器化技术已成为现代开发的标配,配合Python虚拟环境管理能创建隔离的项目环境。桌面环境优化涉及GNOME扩展管理和中文输入法配置,这些都是提升日常使用体验的基础操作。系统性能调优包括电源管理和Zswap内存压缩技术,特别适合资源受限的设备。从安全角度看,防火墙配置和自动更新设置是服务器环境的基础防护措施。

cnmik42448的专栏 445
上一篇: Qt状态机QStateMachine使用
下一篇: gdb使用介绍
conquerwave
博客等级 码龄18年 57粉丝 75原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值