《Linux 驱动学习 - 1 》hello world 没有那么简单

Linux设备驱动开发入门——Hello world       近期做的工作主要有两个,一是将dvsdk_4中的video_copy项目移植到自己的板子上,在参考资料极其匮乏的情况下,本人继续发扬艰苦奋斗的作风和打不死的小强精神,终于将Omap3530中的DSP成功地跑起来了。另一个工作就是开始学习Linux设备驱动开发,为编写新设备的驱动做准备。dvsdk的内容比较庞杂,所做的工作还在整理之中,后面我会发出来。Linux设备驱动开发的资料很多 阅读详情

https://ke.qq.com/course/466167?taid=4166582134054135

 

#include <stdio.h>
  
/*
 * 执行命令 ./hello kodulf
 * argc = 2
 * argv[0] = ./hello
 * argv[1] = kodulf
 *
*/


int main(int argc, char **argv){
        if(argc >= 2){
                printf("hello world %s \n",argv[1]);
        } else {
                printf("hello world");
        }
        return 0;
}

执行:这里的-o 是output 的意思

root@iZrj9e3565o1e423gw4xgiZ:/linux_study/lesson_1# gcc -o hello hello.c
root@iZrj9e3565o1e423gw4xgiZ:/linux_study/lesson_1# ls
hello  hello.c
root@iZrj9e3565o1e423gw4xgiZ:/linux_study/lesson_1# ./hello kodulf
hello world kodulf 
root@iZrj9e3565o1e423gw4xgiZ:/linux_study/lesson_1# 

 

1: 头文件的作用,告诉别人,告诉编译器,这个函数应该怎么调用

2: 头文件在哪里?分为两种情况,

第一在默认路径里面,可以通过一下命令找到默认的,我们一般使用的是/usr/include 里面的那个

root@iZrj9e3565o1e423gw4xgiZ:/# find . -name "stdio.h"
./usr/include/stdio.h
./usr/include/x86_64-linux-gnu/bits/stdio.h
./usr/include/c++/7/tr1/stdio.h

第二在可以指定,

在代码里面制定的话就是,默认的使用<> ,如果是当前路径使用""引号

root@iZrj9e3565o1e423gw4xgiZ:/linux_study/lesson_1# touch test.h
root@iZrj9e3565o1e423gw4xgiZ:/linux_study/lesson_1# vim hello.c
root@iZrj9e3565o1e423gw4xgiZ:/linux_study/lesson_1# gcc -o hello hello.c
root@iZrj9e3565o1e423gw4xgiZ:/linux_study/lesson_1# vim hello.c
root@iZrj9e3565o1e423gw4xgiZ:/linux_study/lesson_1# gcc -o hello hello.c
hello.c:2:10: fatal error: test.h: No such file or directory
 #include <test.h>
          ^~~~~~~~
compilation terminated.
root@iZrj9e3565o1e423gw4xgiZ:/linux_study/lesson_1# find / -name "stdio.h"
/usr/include/stdio.h
/usr/include/x86_64-linux-gnu/bits/stdio.h
/usr/include/c++/7/tr1/stdio.h
root@iZrj9e3565o1e423gw4xgiZ:/linux_study/lesson_1# cp test.h /usr/include/
root@iZrj9e3565o1e423gw4xgiZ:/linux_study/lesson_1# gcc -o hello hello.c

编译的时候制定,添加-I 的选项 I 是i的大写, 可以认为是include 的第一个字符的

#include <stdio.h>
#include <test.h>
#include <test2.h>
/*
 * 执行命令 ./hello kodulf
 * argc = 2
 * argv[0] = ./hello
 * argv[1] = kodulf
 *
*/


int main(int argc, char **argv){
        if(argc >= 2){
                printf("hello world %s \n",argv[1]);
        } else {
                printf("hello world");
        }
        return 0;
}
root@iZrj9e3565o1e423gw4xgiZ:/linux_study/lesson_1# touch  /test/test2.h
root@iZrj9e3565o1e423gw4xgiZ:/linux_study/lesson_1# vim hello.c
root@iZrj9e3565o1e423gw4xgiZ:/linux_study/lesson_1# gcc -o hello hello.c
hello.c:3:10: fatal error: test2.h: No such file or directory
 #include <test2.h>
          ^~~~~~~~~
compilation terminated.
root@iZrj9e3565o1e423gw4xgiZ:/linux_study/lesson_1# gcc -o hello hello.c -I /test

第三printf函数在哪里呢?

库的默认的路径是lib 目录

 

注意要区分 -I, -l 和-L  的区别, 后面讲解

-I (大写i)指定头文件目录

-l (小写l)制定某个库

-L 指定库目录

 

 

 

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

相关推荐

openwrt 驱动 hello world

本想按照官网文档去编译驱动,发现好麻烦,不知道那步骤出了差错,死活编译不出来, 后来看了网上有一篇教程编译openwrt的应用的,发现openwrt其实就跟普通linux无差别 所以试试写用之前的驱动helloworld写了makefile,果然也是可行的 下面是最普通的驱动hello world程序 #include #include #include /* hello_i

zmy12007的专栏 911

gcc-include

GNU GCC在线参考手册 https://gcc.gnu.org/onlinedocs/ 01 c语言或C++语言 头文件包含方法 include “pathname” include < pathname > 02 编译器头文件检索过程 配置等级: 最低优先级因素 GNU Compiler Collection (GCC) Internals (编译内置) 居中优先级因素 Envi...

uncle103的博客 700

linux内核编程(hello world示例程序)

linux内核编程(hello world) Linux可加载内核模块是 Linux 内核的最重要创新之一。它们提供了可伸缩的、动态的内核。其它开发者可以不用重新编译整个内核便可以开发内核层的程序,极大方便了驱动程序等的开发速度。 本系列文章主要是记录个人从hello world开始,通过学习linux内核基本编程操作,再对ipvs负载均衡器源码进行初步学习分析;最后,基于netfil

绯浅yousa的笔记 1万+

如何找linux宏的头文件,如何在Linux中找到C编程语言的头文件?

如何在Linux中找到C编程语言的头文件?当我用Linux编写C程序,然后使用gcc编译它们时,我总是对那些头文件在哪里感到好奇。 例如,其中stdio.h是。 更笼统地说,stdbool.h在哪里?我不仅想知道它在哪里,而且还想知道如何获得这些地方,例如,使用shell命令或使用C编程语言。10个解决方案62 votes#include将打印每个包含文件的完整路径,作为常规编译的副作用。 除了使...

weixin_29802189的博客 722

别再手动建模了!用Simscape Multibody Link一键导入SolidWorks装配体到Simulink

本文介绍了如何利用Simscape Multibody Link插件将SolidWorks装配体一键导入Simulink,实现CAD到仿真的无缝衔接。该技术显著提升机械系统设计与控制效率,特别适用于工业机器人、车辆悬架等复杂机构的动力学分析。文章详细解析了插件安装、模型导出优化及仿真验证的全流程,帮助工程师摆脱手动建模的低效工作模式。

weixin_27256197的博客 461

工业界实战:小红书推荐系统中的AB测试策略解析——分层、Holdout与反转实验

本文深入解析了小红书推荐系统在工业界实践中采用的AB测试核心策略。重点阐述了分层实验如何解决多实验并行与干扰问题,Holdout机制如何作为评估黄金标准提供稳定基准,以及反转实验如何作为全量上线后的终极安全网进行风险控制。这些策略共同构成了科学、严谨的线上评估体系,是保障推荐系统迭代效果与决策质量的关键。

transformer2023的博客 477

如何查看linux头文件内容,如何在Linux中找到C编程语言的头文件?

zwol..62gcc -H ...将打印每个包含文件的完整路径作为常规编译的副作用.-fsyntax-only另外使用它不要创建任何输出(它仍会告诉你程序是否有错误).示例(Linux,gcc-4.7):$ cat > test.c#include #include ^D$ gcc -H -fsyntax-only test.c. /usr/lib/gcc/x86_64-linux-gnu...

weixin_28998761的博客 682

Opencv全景图像处理实战:柱面与透视展开技术详解

本文详细解析了使用OpenCV实现全景图像处理的两种核心技术:柱面展开与透视展开。通过原理拆解与实战代码演示,指导开发者将360度环绕的鱼眼或球面图像转换为可用的平面视图,适用于街景展示、车载环视、室内测量等计算机视觉应用场景。

weixin_29081163的博客 583

gcc编译一个hello.c的一个过程

输入命令查看编译过程 参考自《ctf竞赛权威指南 PWN篇》 gcc hello.c -save-temps --verbose Using built-in specs. COLLECT_GCC=gcc COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/8/lto-wrapper ##这个是 Link Time Optimization,看这篇文章:https://blog.youkuaiyun.com/qq_36287943/article/detai

weixin_45564533的博客 1339

MOS管关断时尖峰电压的5种实用抑制方案(附实测数据对比)

本文针对MOS管关断时产生的尖峰电压问题,提供了五种经过实验室实测验证的实用抑制方案。文章从尖峰电压的成因分析入手,详细阐述了优化PCB布局、设计RC缓冲电路、选用TVS二极管钳位、调节驱动电路以及使用磁珠吸收高频振荡等方法的原理、实施步骤与实测数据对比,为硬件工程师解决开关电源和电机驱动中的过压应力与EMI问题提供了系统性的实战指南。

1240

具身智能(40):主流 VLA 模型π₀

摘要: π₀是首款专为机器人设计的VLA(视觉-语言-动作)端到端基础模型,通过双阶段训练实现“感知-决策-执行”闭环。其创新点包括:1)FlowMatching技术实现连续平滑动作控制(精度0.3°);2)结合VLM预训练与多机器人实操数据,零样本任务完成率达76.4%,远超同类模型;3)支持模糊指令理解与动态场景适应(如遮挡识别)。开源版本涵盖不同规模模型,适用于工业装配、服务机器人等场景,在延迟(213ms)和稳定性(92%自主恢复率)上显著领先OpenVLA等竞品。

码农17年的博客 510

嵌入式linux开发笔记: gcc选项

fatal error: sys/cdefs.h No such file or directory 解决方案 在64位的ubuntu系统,使用gcc想编译出32位的应用程序,需要使用gcc -m32选项,但是使用gcc -m32选项后,出现: fatal error: sys/cdefs.h: No such file or directory| 可以使用如下方...

我思故我在! 1816

7、PPG信号处理与质量评估

本文详细介绍了PPG信号的处理与质量评估方法,包括信号滤波技术(如卷积和互相关)、滤波器选择、信号质量指标(SQI)的定义与应用,以及标注一致性的评估。同时,提供了MATLAB代码示例和操作步骤,并分析了不同指标的优势与适用场景,旨在提高PPG信号在诊断和监测中的准确性与可靠性。

salt的博客 254

树莓派-底层开发(1)-linux驱动hello world

最近想鼓捣一下Linux,手头刚买一块树莓派3B+,笔者以前只干过单片机,我想是否可以像单片机那样,从读写寄存器这个角度进行学习理解。首先希望实现硬件的驱动编写,网上这方面资料杂并且久,水平较低折腾了一天,终于写了一个可以跑的驱动模块,整理在这里,备忘并供需要的朋友参考。 开发环境 PC:ubuntu 64位 ssh接入显示信息如下 Welcome to Ubuntu 18.04.2 LTS (...

智能硬件 8876

YOLOv11改进,YOLOv11结合DynamicConv(动态卷积),CVPR2024,二次创新C3k2结构

DynamicConv(动态卷积)是一个用于提高卷积神经网络(CNN)性能的技术,核心思想是动态地生成卷积核(filter),而不是使用固定的卷积核。通过引入更多的计算灵活性和适应性来增强卷积操作的表达能力,进而提升模型的性能。专家选择:DynamicConv 通过引入多个“专家”(experts),每个专家学习特定的卷积模式。输入图像的不同部分会选择不同的专家进行卷积。动态卷积核生成:根据输入的不同特征,专家网络动态地生成卷积核,而不是使用固定的卷积核。

在职AI算法工程师,擅长计算机视觉,YOLO目标检测、分割等,擅长web、pyqt界面可视化,好内容持续更新中,来这里跟大家一起学习,共同进步 2263

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

Linux驱动学习之Hello World驱动

文章目录前言一、Linux驱动说明1.1 Linux驱动分类二、字符设备驱动实现2.1 设备号2.2 file_operation结构体2.3 设备操作函数2.4 设备注册和注销2.5 驱动加载和卸载2.6 入口和出口函数2.7 添加相关信息三、hello驱动 前言 linux驱动的开发一般都是在一下框架之下实现的,先从最简单的Hello World驱动开始,可以帮助我们了解Linux驱动开发的基...

NameisBoy的博客 775

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

linux驱动学习1---Hello World模块

1. 开发环境:    ubuntu12.04 LTS  hello.c源码:

finewind的专栏 1683

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

Linux 简单的Hello World 驱动模块与Makefile编写

我们首先从hello world 开始编写一个驱动模块 既然说模快,肯定有非模块,非模块就是直接编译进内核。 模块具有这样的特点: 模块不会被编译进内核,从而减少了内核image的大小 内核加载后,与内核中其他部分一样 废话不多说,先上代码 hello_world.c #include <linux/module.h> #include <linux/init.h...

qq_1343273173的博客 1363

4412开发板学习之Linux驱动开发(一):HELLO WORLD

驱动开发HELLO WORLD前言最小驱动模块示意图Hello World源码及分析使用Makefile进行编译Makefile源码及分析编译流程分析编译在开发板进行模块的操作将.ko文件复制到开发板安装模块查看模块卸载模块 前言 开始学习Linux驱动开发了,对于所有的程序员来说,任何语言,任何工具,第一个程序当然是Hello World了 最小驱动模块示意图 Hello World源码及分析...

a568713197的博客 2279

【Linux】第一个驱动程序,hello world!开启驱动之旅

不涉及硬件,实现过程中熟悉驱动。

希希雾里 2132

Linux设备驱动之Hello world驱动的实现

前言本文的写作对象是刚刚接触Linux设备驱动,希望能够快速上手编写一个简单设备驱动的学生或者是爱好者。读者应当对Linux操作系统有一定的了解,掌握基本的Linux系统命令。准备工作搭建Linux环境本文所使用的Linux环境为: 项目 内容 操作系统 Ubuntu 14.04 LTS 搭建时间 2015年12月 内核版本 3.16.0-30-generic 内核版本

u013686105的博客 1204

Linux2.6驱动程序入门—Hello World

1、引言     记得在学习VC++和C语言的时候,一开始都会以一个HELLO WORLD的例子作为演示,将学者逐渐引入殿堂,这个几乎成了计算机编程语言学习必经的一个入门之路。     当然,在学习linux编程的时候也是这样,下面的例子应该是再熟悉不过了:     首先用VI编写一个C程序:vi hello.c     #include   "stdio.h"      int ma

lwe的专栏 792

使用Linux编写最简单的hello world驱动程序

我们在学习C语言或着其他语言的时候第一个程序都是打印hello world,所以我们今天学习驱动程序的开发也是使用hello world作为我们的第一个程序。

让技术没有门槛 2645

编写Linux驱动程序的hello world

0准备条件操作系统:VMware的虚拟机中运行的Debian的9采用的内核:linux4.9 1.下载linux的源代码的Debian或ubuntu的下,使用容易工具下载的Linux源码的CentOS使用yum的苏易于得到安装Linux的-y源安装完成后应当能够在/ usr / src目录中看到如下3个文件或文件夹:DTS @ debian的:〜$ LS的/ usr / src / linux...

时梦的博客 1430

linux设备驱动程序--hello-world

linux字符设备驱动程序--hello_world 基于4.14内核, beagleBone green平台 PC端的设备驱动程序 有过电脑使用经验的人都知道,当我们将外部硬件设备比如鼠标键盘插入到电脑端口(通常是USB口)时,在windows系统右下角会弹出"安装设备驱动程序"的显示框,那么,为什么每个硬件都需要安装设备驱动程序才能使用呢? 首先,每个硬件都有相应的功能,鼠标的功能就...

did59261的博客 502
上一篇: ubuntu 和linux 上面git clone 的时候内存不足导致失败的最完美解决 index-pack died of signal
下一篇: 《Linux 驱动 学习 -2》 gcc 编译器学习
千雅爸爸
博客等级 码龄18年 292粉丝 639原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值