linux驱动学习(一) Makefile基础

Linux驱动移植之makefile编译系统学习(一) 首先推荐一篇文章“跟我一起写 Makefile(http://blog.youkuaiyun.com/haoel/article/details/2886)【1】”,里面深入浅出介绍了makefile的语法。1、Makefile介绍  (摘自【1】)  makefile关系到了整个工程的编译规则。一个工程中的源文件不计数,其按类型、功能、模块分别放在若干个目录中,makefile定义了一系列的规则来指定,哪些... 阅读详情

原文地址:http://blog.youkuaiyun.com/ghostyu/article/details/6865654

linux与windows 的C编程差异之一就是Makefile,对于学习C语言来说,起初最好是在linux环境下。

一般的程序都是由多个源文件编译链接而成,除了极其简单的hello word,这些源文件的处理步骤通常用Makefile来管理。Makefile有什么作用呢,先编写一个简单的程序。

程序有三个源文件main.c  hello.c word.c 以及各自的头文件main.h hello.h word.h组成

  1. //main.c  
  1. #include"main.h"  
  2. #include"hello.h"  
  3. #include"word.h"  
  4.   
  5. void main_say()  
  6. {  
  7.     printf("I am main!\n");  
  8. }  
  9.   
  10.   
  11. int main(void)  
  12. {  
  13.     main_say();   
  14.     hello_say();  
  15.     word_say();  
  16. }  

  1. //main.h  
  1. #ifndef MAIN_H  
  2. #define MAIN_H  
  3.   
  4. void main_say();  
  5.   
  6. #endif  



  1. //hello.c  
  1. #include"hello.h"  
  2.   
  3. void hello_say()  
  4. {  
  5.     printf("I am hello!\n");  
  6. }  
  1. //hello.h  
  1. #ifndef HELLO_H  
  2. #define HELLO_H  
  3.   
  4. extern void hello_say();  
  5.   
  6. #endif  


  1. //word.c  
  1. #include"word.h"  
  2. void word_say()  
  3. {  
  4.     printf("I am word!\n");          
  5. }  
  1. //word.h  
  1. #ifndef WORD_H  
  2. #define WORD_H  
  3.   
  4. extern void word_say();  
  5.   
  6. #endif  

在没有Makefile的情况下可以这样编译

  1. gcc main.c hello.c word.c -o main  

但是,其中的一个源文件如hello.c改动了,这些源文件都得重新编译,所以可以改成这样编译

  1. $gcc  -c main.c  
  2. $gcc  -c hello.c  
  3. $gcc  -c word.c  
  4. $gcc main.o hello.o word.o -o main  

如果修改了hello.c 只要重新执行

[plain] view plain copy
  1. $gcc  -c hello.c  
  2. $gcc main.o hello.o word.o -o main  


这样虽然简化了程序的编译,但是每次都得重新输入命令,效率低,而且很容易出错,所以Makefile就是来解决上列问题,但不止于此。

将Makefile与源代码放在同一目录下

[plain] view plain copy
  1. main: main.o hello.o word.o  
  2.     gcc main.o hello.o word.o -o main  
  3.   
  4. main.o: main.c main.h hello.h word.h  
  5.     gcc -c main.c  
  6.   
  7. hello.o: hello.c hello.h  
  8.     gcc -c hello.c  
  9.   
  10. word.o: word.c word.h  
  11.     gcc -c word.c  

make后,在终端打印了执行的命令

make命令会自动读取当前目录下的Makefile


<localhost.localdomain:/data/ghostyu/linuxc> make
gcc -c main.c
gcc -c hello.c
gcc -c word.c
gcc main.o hello.o word.o -o main
<localhost.localdomain:/data/ghostyu/linuxc>
这样每次修改源文件后 只要make 下就可以了!
Makefile的编写规规则为一个或多个下列命令组构成:
target ... : prerequisites ... 
cmd1
cmd2
...


如:
main: main.o hello.o word.o
gcc main.o hello.o word.o -o main


main为规则的目标(target),main.o hello.o word.o 为这条规则的条件(prerequisites)
要更新目标,必须先更新所有条件,若条件被更新,目标必备更新,更新的依据为文件的修改时间。
所以上列Makefile中,会先执行
main.o: main.c main.h hello.h word.h
gcc -c main.c


hello.o: hello.c hello.h
gcc -c hello.c


word.o: word.c word.h
gcc -c word.c
而后才链接目标main
main: main.o hello.o word.o
gcc main.o hello.o word.o -o main


通常Makefile中会有一条clean规则,用于清除编译过程中产生的二进制文件,保留源文件
在Makefile中加入clean
clean:
@echo "cleanning project"
-rm main *.o
@echo "clean completed"


命令rm前加了‘-’号,表示即使make执行这条命令出错了,也会继续运行,像rm,mkdir等一般会加上‘-’,因为rm的文件可能已经被删除,或者mkdir的目录已经存在。


<localhost.localdomain:/data/ghostyu/linuxc> make clean
cleanning project
rm main *.o
clean completed
<localhost.localdomain:/data/ghostyu/linuxc> 


大家试试吧echo前的@符号去掉试试,结果如下
<localhost.localdomain:/data/ghostyu/linuxc> make clean
echo "cleanning project"
cleanning project
rm main *.o
echo "clean completed"
clean completed
<localhost.localdomain:/data/ghostyu/linuxc>
如果make执行的命令前面加了@字符,则不显示命令本身而只显示它的结果。


假如源文件中有个叫clean.c的源文件,然后make的时候就直接 make到这个clean源文件了,所以Makefile中的clean部分要特殊说明下,将clean声明为一个伪目标:
clean:
@echo "cleanning project"
-rm main *.o
@echo "clean completed"
.PHONY: clean


clean目标是一个约定俗成的名字,类似这样约定成俗的名字还有:


install,执行编译后的安装工作,把可执行文件、配置文件、文档等分别拷到不同的安装目录。
clean,删除编译生成的二进制文件。


distclean,不仅删除编译生成的二进制文件,也删除其它生成的文件,例如配置文件和格式转换后的文档,执行make distclean之后应该清除所有这些文件,只留下源文件。


注,Makefile文件名也可以是小写的makefile,执行make时,按照 makefile,Makefile的顺序找到的第一个为默认的Makefile
我的Linux驱动学习路线 驱动和内核紧密联系,你会看那些资深的驱动工程师往往对内核子系统有比较了解,如内存优化,死机问题都是信手拈来 ,所以深入驱动避免不了接触内核子系统,所以各位还想更深入的学习Linux内核各个子系统,像内存子系统,进程子系统,网络子系统,中断子系统,进程管理等的推荐笨叔叔的奔跑吧Linux,王利涛的嵌入式自我养成的教程。 阅读详情

相关推荐

Linux驱动(多文件)的Makefile实现

方式1常用于编写,调试阶段。驱动源码的文件夹位置独立自由,只要在Makefile中指定好Linux内核源码的路径。方式2常用于最后集成阶段,在调试基本完成后,可以将驱动源代码文件(夹)放置在Linux内核源码的driver/xxx/的相应路径中,修改本层和上层的Makefile和KConfig文件,并重新make menuconfig内核,可以在Menu中选中新加入的驱动模块,然后make module,就可以在驱动源码文件夹生成.ko文件。方式1:ifeq ($(KERNELRELEASE),) K

草莽农夫 5513

内核编译 删除编译生成文件命令

在编译内核时, 被make clean, make mrproer和 make distclean搞的纠结, 稍微总结一下这三者之间的区别: 解压内核源码包后, 到内核源代码目录树的顶层目录, 执行 # make help Cleaning targets: clean - Remove most generated file...

weixin_34247032的博客 902

linux字符设备驱动开发模板及Makefile

linux2.6字符设备驱动开发模板 #include #include #include #include #include //=======================字符设备驱动模板开始 ===========================// #define CHAR_DEV_DEVICE_NAME "char_dev" // 是应当连接到这个编号范围的设备的

Atlas2013的专栏 6136

【linux】Makefile 万能模板

Linux 驱动经典MAkefile 完成大部分驱动的编译,使用时只需要修改一下要编译生成的驱动名称即可。只需修改obj-m的值。 ifneq ($(KERNELRELEASE),) obj-m := demo.o else #generate the path CURRENT_PATH:=$(shell pwd) #the absolute path LINUX_KERNEL_PAT...

汽车电子开发 1048

Linux内核驱动模块添加并编译(Makefile)

文章目录添加所需编译的目录添加驱动源代码编写Makefile在菜单中选中需要编译的选项编译自定义Linux内核菜单 配置好Linux内核菜单后就要在菜单下添加内容。根据用户的选择配置内核菜单的各种选项,Linux在编译的时候就就会根据选择好的模块源代码进行编译并整合到Image中,从而实现Linux内核的裁剪。 添加所需编译的目录 本次添加的自定义菜单在drivers目录下,要编译aamenute...

zxng_work的博客 7345

SVPWM原理与MCU/FPGA实现:从数学推导到工程实战

空间矢量调制(SVPWM)是实现高性能电机驱动控制的核心算法之一,其通过六个基本电压矢量与零矢量的伏秒平衡,在一个PWM周期内合成任意方向的旋转电压圆,相比传统SPWM可提升约15%的直流电压利用率。该技术不仅涉及扇区判断、作用时间计算、过调制限幅等数学原理,还在MCU与FPGA两种硬件平台上有不同的工程实现路径,包括中心对齐PWM配置、死区插入、定点数流水线设计等。在电动工具、无人机、机器人及车载执行器等电池供电场景中,SVPWM直接决定续航与扭矩表现。本文从数学原理出发,详细拆解MCU和FPGA实现细节

weixin_34265814的博客 301

Linux 驱动学习笔记-Makefile 函数调用(一)

Linux 驱动学习笔记-Makefile 函数调用(一) 函数调用语法 Makefile 函数调用的语法和变量类似,也是用 $ 来标识的,其语法如下: $(function argument1, argument2, argument3) 或者是: ${function, argument1, argument2, argument3} 这里,function 就是函数名,make 支持的函...

tyustli 260

晶圆测试(Wafer Sort)的核心技术与良率提升策略

晶圆测试(Wafer Sort)是芯片制造中的关键“入学考试”,通过探针台与自动测试设备(ATE)对晶圆上的芯片进行功能与参数测试,筛选不合格芯片以控制成本。本文深入解析了其核心技术,包括自动化视觉系统对准、测试流程优化策略,并探讨如何利用测试数据驱动良率提升,展望了DFT与AI智能测试的未来趋势。

e4f5g6h的博客 515

Linux驱动学习一(各级Kconfig和Makefile、Linux内核菜单配置界面的关系)

这里记录一下字符设备驱动Kconfig的作用。 1.在Linux内核代码中的drivers/char/Kconfig中有如下代码: (1). menu "Character devices"是菜单名,下面会看到。 (2). source "drivers/tty/Kconfig"通过source语句引入别的Konfig。 (3). config是一个关键字,定义一个设备驱动的名字,这里...

forwardjia的博客 706

基于 国产USRP B210 的通信+侦测+干扰三合一实验平台,解锁无线攻防全场景!

在当代复杂电磁环境与多样化通信需求并存的背景下,软件定义无线电(SDR)技术正展现出前所未有的系统灵活性与功能可重构性。由两台USRP-LW B210软件无线电设备模拟无线链路通信过程,能够模拟多种无线通信信号传输及图像传输场景,适用于通信协议验证、抗干扰测试及教学实验。,支持"通信-侦测-干扰-优化"的闭环实验流程,为无线通信领域的教学科研与工程应用提供了一套经济高效、功能完备的解决方案。系统可对通信链路信号进行快速、自动化侦测、识别、告警,并支持多种干扰信号生成、模式切换及效果评估功能。

luowave2012的博客 832

基于多智能体协作的量化交易研究框架TradingAgents详解

量化交易系统通过算法模型分析市场数据,旨在实现自动化投资决策。其核心原理在于利用计算机强大的数据处理能力,结合统计学和机器学习方法,从历史数据中挖掘可重复的盈利模式。这一技术的价值在于能够克服人类情绪干扰,实现纪律性交易,并快速处理海量信息。在应用场景上,量化策略广泛应用于股票、期货、外汇等多个金融市场。本文聚焦的TradingAgents框架,创新性地引入了**多智能体协作**和**对抗性验证**机制,通过模拟真实投研团队的分工与辩论流程,构建了一个研究友好、决策过程可解释的量化交易研究平台,为探索大语言

weixin_36019375的博客 431

Linux驱动开发笔记(一):helloworld驱动源码编写、makefile编写以及驱动编译基本流程

基于linux的驱动开发学习笔记,本篇是描述了一个字符驱动的基础开发流程,以便做嵌入式开发多年的应用或者系统学习驱动开发。

长沙红胖子 Qt・西安|省级科研团队从业背景,深耕双一流体系高精尖技术配套研发|剥离高精尖机理,沉淀高端特种行业领域 Qt 工程化落地经验|博文仅分享通用技术总结,输出公开普适工程思路。 2万+

PYNQ-Z2 开发板从镜像烧录到 Jupyter 交互全流程指南

本文详细介绍了PYNQ-Z2开发板从镜像烧录到Jupyter交互的全流程指南,包括硬件解析、镜像烧录技巧、设备启动与网络配置、Jupyter Notebook深度使用以及实战案例分享。通过具体步骤和实用技巧,帮助开发者快速上手PYNQ-Z2开发板,实现高效的FPGA开发和智能家居控制应用。

weixin_28736355的博客 438

Linux驱动开发中的Makefile编写全指南:从基础到高级实战

本文全面解析PyQt框架,涵盖核心架构、信号槽机制、基础组件、布局管理及面试高频问题。重点剖析信号与槽的连接方式、参数传递和多线程实现,提供布局管理对比和嵌套示例。包含简易文本编辑器实战项目,介绍PyQt6新特性变化,并给出调试技巧和学习资源推荐。内容从基础概念到高级应用,适合开发者系统掌握PyQt技术栈,从容应对相关面试挑战。

niuTyler的博客 1994

【异常】Hermes Agent调用z.ai接口失败(余额不足)API call failed (attempt 1/3): RateLimitError [HTTP 429]

补充说明:同步尝试解析接口对应网页时,出现“网页解析失败,可能是不支持的网页类型,请检查网页或稍后重试”提示,该提示不影响核心报错排查,仅作为辅助信息。

奶爸的编程之路,也就一周冷个三天 1194

01 - 什么是SVM

摘要:SVM(共享虚拟内存)技术使CPU和GPU能共享同一虚拟地址空间,简化异构计算编程。传统模型需手动管理CPU/GPU内存和拷贝数据,而SVM允许直接传递指针,自动处理页面迁移和一致性维护。其核心包括统一地址空间、按需迁移、页面故障处理和一致性管理,显著降低编程复杂度并提升性能。通过HMM框架、MMU通知和GPU页面异常等机制实现高效内存共享,支持复杂数据结构,为异构计算带来便利。

图形/计算GPU的驱动与虚拟化技术分享园地 3123

Linux驱动学习-Makefile

Makefile是一种无后缀的文本文件,用于自动化管理编译过程。它能自动检测文件改动,只重新编译受影响的部分,简化复杂命令为一键操作,并支持跨平台。核心语法包括目标定义(如obj-m+=模块名)、路径变量(KDIR/PWD)和编译规则(make -C)。Makefile提供自动变量($@、$^等)简化规则编写,支持并行编译(make -j4)和清理操作(make clean)。通过条件语句和变量覆盖(TARGET=debug)实现灵活配置,是高效管理C/C++项目的标准工具。

Guai_lu的博客 671

工业级AI智能体落地:OpenClaw+ONNX Runtime全栈部署,端到端延迟压至12ms

OpenClaw+ONNX的组合为工业AI智能体的落地提供了一套完整、高效、安全的解决方案。它解决了传统云端智能体在工业场景中面临的延迟、安全和稳定性问题,实现了本地数据闭环和毫秒级响应。未来,随着边缘计算和轻量级大模型技术的发展,工业AI智能体将变得更加智能和强大。我们可以预见,在不久的将来,工厂里的每一台设备都将拥有自己的AI智能体,它们能够自主感知、自主决策、自主执行,真正实现工业生产的全自动化和智能化。👉 点击我的头像进入主页,关注专栏第一时间收到更新提醒,有问题评论区交流,看到都会回。

2601_94871597的博客 735

linux内核驱动模块开发makefile实例解析

昨天整理了一篇关于linux内核驱动模块的开发介绍入门,其中介绍了一些关于驱动模块的基本开发步骤,不过面广而不深,很多细节都没有涉及到,其中就包括如何编写驱动模块的makefile。那么,今天我们就来聊一聊这个话题。以下是摘自网络上的一个经典的linux设备驱动的Makefile文件,以及详细的内容解释。此文件可以完成对大部分驱动的编译,使用时只需要稍加修改就可以了。

不积跬步,无以至千里! 1万+

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

linux驱动基础

驱动基础入门

weixin_51802104的博客 1358

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

Linux学习之Makefile编写

文章目录1.GCC常见命令1.1 查看gcc版本号1.2 GCC输出目标文件1.3 编译流程2.Makefile基础2.1 编译多个文件2.2 单独编译各个文件,最后链接2.3 Makefile基础 1.GCC常见命令 1.1 查看gcc版本号 Target: x86_64-linux-gnu :说明只能编译在X86架构上运行的程序 1.2 GCC输出目标文件 编译生成目标文件及错误提示 1.3 编译流程 GCC编译器的编译流程是:预处理、编译 、汇编和链接。预处理 就是展开所有的头文件、 替换程序

i阳光仔的博客 1754

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

linux设备驱动加载的Makefile学习

因工作需要,现需要学习linux设备驱动,从最简单的字符设备驱动开始,把自己的学习点滴记录下来,坚持自己去思考和总结。 我为第一个hello world字符驱动程序写的makefile如下所示: #KVERS = $(shell uname -r) ifneq ($(KERNELRELEASE),) obj-m += hello_world.o   else KERDIR =/u

毅&意&忆 940

linux驱动模块Makefile解

linux驱动模块Makefile解析

韩朋的博客 4016
上一篇: uboot 参数对应着内核模块的参数 module_param
下一篇: linux驱动学习(二) Makefile高级
July_Yang
博客等级 码龄15年 46粉丝 15原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值