【Linux驱动开发 ---- 1.1_Linux 基础操作入门】

Linux驱动开发入门基础 系统运行所需组件 uboot、kernel(即内核)、设备树dtb、根文件系统。 Uboot(下载模式和启动模式) Uboot是一个bootloader(注意发音low),一个比较复杂的裸机程序,为系统的启动做准备,用来启动linux或其它系统,linux一般是运行在DDR的,所以要将存放在SD/EMMC/NANDFLASH的zImage,uImage等系统镜像拷贝到DDR中,再去启动。 我们也... 阅读详情

Linux驱动开发 ---- 1.1_Linux 基础操作入门

学前预览

目标:熟悉 Linux 基本操作,为后续驱动开发奠定基础。
重点:

  • Linux 常用命令:ls、cd、chmod、ps、top、grep、find 等。
  • 进程管理与系统监控:ps、top、htop、kill、nice 等。
  • 文件系统结构:/etc、/var、/dev、/sys、/proc 等。
  • 了解 procfs 和 sysfs 的作用。

1. Linux 目录结构概述

Linux 采用 树状结构 的文件系统,主要目录如下:

目录说明
/根目录,所有文件和目录的起点
/bin二进制可执行文件,包含常用命令 (ls, cp, mv 等)
/etc系统配置文件 (passwd, fstab 等)
/home用户目录 (/home/your_username)
/var变量数据 (日志 /var/log/, 进程 /var/run/)
/dev设备文件 (如 /dev/sda1, /dev/ttyUSB0)
/proc内核和进程信息 (虚拟文件系统)
/sys设备驱动和硬件信息

实践任务:

ls /
ls /proc
cat /proc/cpuinfo    # 查看 CPU 信息
cat /proc/meminfo    # 查看内存信息
ls /sys/class        # 观察设备分类

2. 常用命令

(1)文件与目录操作

ls -al            # 列出所有文件(含隐藏文件)
cd /etc           # 进入 /etc 目录
pwd               # 显示当前路径
mkdir test_dir    # 创建目录
rm -rf test_dir   # 删除目录

案例:创建一个 driver_project 目录,并在其中创建 src 和 docs 子目录:

mkdir -p ~/driver_project/src ~/driver_project/docs
ls -R ~/driver_project  # 递归列出结构

在这里插入图片描述

(2)文件权限管理

chmod 755 my_script.sh  # 赋予可执行权限
chown root:root myfile  # 更改文件所属用户和组

案例:让脚本 test.sh 仅当前用户可执行:

chmod 700 test.sh
ls -l test.sh  # 确认权限

(3)进程管理

ps aux        # 显示所有进程
top           # 实时监视系统进程
kill -9 PID   # 强制终止进程

案例:查找并终止 vim 进程:

ps aux | grep vim
kill -9 <PID>

3. procfs 和 sysfs 介绍

(1)/proc 目录

  • /proc/cpuinfo —— 查看 CPU 信息。
  • /proc/meminfo —— 查看内存信息。
  • /proc/interrupts —— 查看中断信息(与驱动相关)。
  • /proc/modules —— 查看已加载的内核模块。

案例:获取当前系统的进程信息:

cat /proc/uptime
cat /proc/loadavg

在这里插入图片描述

(2)/sys 目录

  • /sys/class/ —— 显示设备分类信息,如 gpio, net, tty。
  • /sys/devices/ —— 存放设备相关信息,驱动开发时需要关注。

案例:查找当前加载的 USB 设备:

ls /sys/bus/usb/devices
cat /sys/bus/usb/devices/usb1/product

在这里插入图片描述


4. Shell 脚本基础

目标:学会编写简单的 Shell 脚本,提高 Linux 操作效率。

案例:写一个自动打印系统信息的脚本:

#!/bin/bash
echo "系统信息概览:"
echo "CPU 信息:"
cat /proc/cpuinfo | grep "model name" | uniq
echo "内存信息:"
cat /proc/meminfo | head -n 5

执行脚本:

chmod +x system_info.sh
./system_info.sh

5. 总结与作业

✅ 今日学习回顾:

  • 掌握了 Linux 目录结构。
  • 熟悉了 ls、cd、chmod、ps、top 等命令。
  • 了解了 /proc 和 /sys 的作用。
  • 编写了一个简单的 Shell 脚本。

📌 作业:

  1. 编写一个 Shell 脚本 monitor.sh,每 5 秒监控 CPU 和内存使用情况:

    while true; do
        echo "CPU 使用率:$(top -bn1 | grep "Cpu(s)" | awk '{print $2}')%"
        echo "可用内存:$(free -m | awk 'NR==2{print $7}') MB"
        sleep 5
    done
    

    执行方式:

    chmod +x monitor.sh
    ./monitor.sh
    

    在这里插入图片描述

  2. 查找 procfs 目录下,列出所有当前加载的模块 (lsmod 命令等价的方式)。
    使用 cat 命令读取 /proc/modules 文件:

    cat /proc/modules
    

    输出解释:

    • 该命令会列出当前加载的所有内核模块。
    • 每行的格式通常是:
      • 模块名:模块的名称
      • 模块大小:该模块占用的内存大小
      • 使用计数:模块当前的引用计数
      • 依赖的模块:该模块依赖的其他模块(如果有)
      • 模块的地址:模块在内存中的起始地址
        在这里插入图片描述
  3. 用 sysfs 方式,查看系统中的所有 USB 设备,并尝试找到 产品名称。
    查看所有 USB 设备的产品名称,可以编写一个循环来查看每个设备的 product 文件。例如:

    for device in /sys/bus/usb/devices/*; do
        if [ -f "$device/product" ]; then
            echo "$(basename $device): $(cat $device/product)"
        fi
    done
    

    这个脚本会遍历所有设备节点,并显示每个设备的 product 信息。

    解释:
    /sys/bus/usb/devices/ 目录下的每个设备节点对应系统中的一个 USB 设备。

    每个设备节点包含许多文件,其中 product 文件存储了 USB 设备的产品名称。

    通过循环遍历该目录下的设备,读取每个设备的 product 文件,可以获取所有 USB 设备的产品名称。
    在这里插入图片描述


Linux驱动开发学习入门第一篇 Linux驱动入门教程一. 阅读详情

相关推荐

Linux驱动入门(二)操作硬件

Linux驱动入门系列 Linux驱动入门(一)字符设备驱动基础 Linux驱动入门(二)操作硬件 Linux驱动入门(三)Led驱动 Linux驱动入门(四)轮询实现按键驱动 Linux驱动入门(五)中断实现按键驱动 Linux驱动入门(六)poll机制实现按键驱动 Linux驱动入门(七)使用定时器防按键抖动 Linux驱动入门(二)操作硬件 文章目录Linux驱动入门(二)操作硬件一、通用做...

JT同学的博客 2455

Linux驱动开发基础

一、内核态和用户态 内核态与用户态是操作系统的两种运行级别,cpu提供Ring0-Ring3三种级别的运行模式。Ring0级别最高,Ring3最低。 CPU是在两种不同的模式下运行的:Kernel Mode(内核态),在内核模式下(执行内核空间的代码),具有ring0保护级别,代码具有对硬件的所有控制权限。可以执行所有CPU指令,可以访问任意地址的内存。内核模式是为操作系统最底层,最可信的函数服务的。在内核模式下的任何异常都是灾难性的,将会导致整台机器停机。 User Mode(用户态),在用户模式下

风间琉璃的博客 2万+

[Linux外设驱动详解]第一部分:基础篇 —— 驱动开发入门

本文介绍了Linux设备驱动开发的基础知识,重点围绕RK3588平台展开。主要内容包括: Linux设备驱动的本质与分类(字符设备/块设备/网络设备) 内核模块机制(动态加载、生命周期) 字符设备驱动开发流程(注册/操作接口) 源码分析方法和设备节点创建 文章通过代码示例和架构图展示了驱动如何在内核空间工作,并连接用户程序与硬件设备。适合嵌入式开发者入门Linux驱动开发,掌握RK3588等ARM平台的驱动开发基础。

Just Linux! 1361

Linux驱动开发系列:整理入门Ubuntu知识

本文系作者学习Linux驱动开发Ubuntu入门篇时整理的一些基础知识,主要整理了ubuntu下Linux的一系列基本操作,以及常用shell指令,makefile语法等等,知识点基本覆盖后面驱动开发所遇到的主要知识点,当前文章也并非是最终版本,笔者在后续的学习中也会不断更新知识点,完善内容

嵌入式学习记录站点 6710

【嵌入式小白从入门到实践】【Linux 驱动开发】:Linux 驱动基础

Linux设备驱动开发作为操作系统内核编程的核心技术,是连接硬件与软件系统的关键桥梁;驱动程序 (Driver:操作系统内核的关键组成部分,是运行在内核态的特殊软件,用于管理和控制硬件设备的专用软件模块;本质是 “硬件抽象层(向上:提供内核可识别的标准化接口(如文件操作接口openreadwrite、网络数据包收发接口),让内核和应用程序无需关注硬件的具体型号、寄存器配置等细节,只需通过统一接口即可操控硬件向下:直接对接硬件的物理接口(如寄存器地址、中断线、DMA通道),理解硬件的底层工作逻辑;

qq_57069342的博客 1164

Linux驱动开发初识

Linux驱动开发初识

weixin_54859557的博客 1471

Linux驱动开发入门

驱动开发既是技术的深度探索,也是对系统理解的全面考验。定期研读内核源码(推荐drivers目录)参与开源社区贡献(如Linux Kernel Mailing List)建立知识体系图谱(可使用思维导图工具)保持硬件敏感度(关注新型接口标准)

波风水门的博客 1504

Linux 驱动开发基础知识——认识LED驱动程序 (二)

当我们学习C 语言的时候,我们会写个 Hello 程序。 那当我们写 ARM 程序,也该有一个简单的程序引领我们入门,这个程序就是点亮 LED。

嵌入式技术开发 6029

linux驱动开发基础

对于新的驱动模块使用modprobe加载的时候需要使用depmod命令。使用depmod命令后可以看到多出一些文件说明加载成功。1、加载驱动(调用驱动)命令 insmode、modprobe。2、驱动加载成功以后可以使用lsmod查看。2、第一个字符驱动开发 chrdevbase。4、虚拟字符设备chrdevbase完善。3、编写APP程序调用驱动(应用开发)笔者注:水平有限,如有错误请不吝指出。3、字符设备的注册与注销。

weixin_68711352的博客 2032

Linux 驱动开发基础知识——Hello驱动程序(一)

我们学习驱动开发的第一个驱动程序Hello驱动程序驱动

嵌入式技术开发 5835

手把手教你用Anaconda安装李沐d2l-zh包(附常见报错解决方案)

本文提供了一份详尽的Anaconda环境下安装李沐d2l-zh包的实战指南。文章从创建虚拟环境、配置国内镜像源加速下载入手,分步讲解核心依赖的预安装策略,并重点剖析了安装过程中常见的报错及其解决方法,旨在帮助初学者和开发者高效、稳定地搭建深度学习实验环境。

efc1234567的博客 1011

Linux驱动入门 —— 利用引脚号操作GPIO进行LED点灯

Linux驱动入门 —— 利用引脚号操作GPIO进行LED点灯

wei_Embedded_z的博客 4800

DBeaver 实战:手动配置 PostgreSQL JDBC 驱动的高级技巧

本文详细介绍了在DBeaver中手动配置PostgreSQL JDBC驱动的高级技巧。针对企业内网、多版本数据库兼容等场景,从获取官方驱动文件、创建自定义驱动配置,到使用Maven坐标管理、连接参数调优及解决常见连接问题,提供了完整的实战指南,帮助开发者实现对数据库连接环境的精准掌控。

apple5的专栏 837

linux驱动编写(入门)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】 在我离职之前,工作内容几乎不涉及到驱动方面的知识。我所要做的内容就是把客户对设备的请求拆分成一个一个的接口,调用驱动的设置进行配置就可以了。当然,至于驱动下面是怎么实现那就要根据具体情况而定了。比如说,有的驱动是芯片厂商直接写好的,假设芯片厂商提供了对应平台的sdk函数,...

嵌入式-老费,一个分享专业嵌入式知识的blog 4万+

拒绝无意义刷屏,打造高效率热点追踪,极空间部署『TrendRadar』

今天的这个项目确实不错,通过部署在极空间NAS之后,我们就能一直不间断的获取到自己想要看到的新闻或者信息。项目的设置项其实有很多,有兴趣的小伙伴可以在部署之后自己慢慢挖掘~目前年终大促正在火热进行中,极空间NAS不管是新品还是之前在售的畅销型号都有专属的优惠,并且还能叠加国补、平台优惠等福利,享受180天换新以及2年质保服务 ,更有抽奖、晒单等活动,喜欢的小伙伴赶快冲吧!

qq_63499861的博客 2293

ESP32学习,驱动LED点阵屏,SD卡播放GIF动图

搬运就可以实现效果,如果有不足,请批评指正。下步该学一下如何文章上视频了,老是截图不方便展示效果。

u011625956的博客 1868

Linux驱动开发简介和入门教程

文章概览了Linux驱动开发,强调驱动作为操作系统与硬件交互的桥梁作用,介绍了字符设备、块设备和网络设备驱动三类,并指出内核模块对动态加载驱动的重要性。讲解Linux中断机制,区分硬件与软件中断,阐述上半部(ISR)快速响应和下半部(Tasklet/Workqueue)延迟处理的任务模式,比较两者特性以适应不同任务需求。提供定时器中断驱动实例,解析定时器设置、中断服务程序设计、Tasklet任务调度执行过程以及资源释放,为理解Linux内核及驱动开发提供了从理论到实践的指导。

Linux内核研究者 2189

AURIX TC397开发板到手第一步:用iLLD库驱动LED流水灯(附完整代码)

本文详细介绍了如何使用英飞凌AURIX TC397开发板和iLLD库实现LED流水灯效果。从开发环境配置到硬件连接,再到完整的代码实现,逐步引导开发者完成项目。文章还提供了优化建议和常见问题解决方案,帮助嵌入式开发新手快速上手。

weixin_30911451的博客 394

树莓派基于Linux内核驱动开发入门指南

写驱动是为了操作IO口,实现自己的wiringpi库,跟硬件打交道。

m0_51430584的博客 5319

基于Ardupilot/PX4固件,APM/PIXhawk硬件的VTOL垂直起降固定翼软硬件参数调试(第一篇)安装调试

基于Ardupilot/PX4固件,APM/PIXhawk硬件的VTOL垂直起降固定翼调试 本文内容大部分来自Kris,我们的K大,在VTOL领域的大牛,在此,非常感谢K大。能引用K大的成果也是自己的荣幸,不便之处还请K大多多包涵,在此引用只是为方便自己日常学习,部分参数表里根据自身情况,增加了相应参数。 1.安装及下载Ardupilot官方固件: VTOL固件的来源可分为Ardupilot官方固...

u011322358的博客 3万+

鸿蒙ijkplayer播放器调优实战:从卡顿掉帧到流畅播放RTSP,我都调了哪些参数?

本文深入解析鸿蒙平台上ijkplayer播放器优化RTSP流媒体播放的关键参数,解决卡顿、掉帧等问题。通过调整缓冲区管理、帧处理策略和网络超时设置,实现流畅播放体验,特别适用于监控和直播等高实时性场景。

weixin_29304021的博客 243

Linux驱动开发快速上手指南:从理论到实战

作为嵌入式Linux开发的核心技能之一,驱动开发对于硬件控制至关重要。面对众多章节和概念,初学者常感到无从下手。本文将为你梳理Linux驱动开发的关键路径,提供从理论到实战的完整指导,帮助你快速上手驱动开发。

niuTyler的博客 4955

Halcon 形态学 开发案例 (开运算opening(先腐蚀再膨胀)、闭运算closing(先膨胀再腐蚀))

算子方法:功能:使用用户自定义的结构元素对区域进行开运算参数: Region(输入参数) :输入区域 StructElement(输入参数) :结构元素(区域) RegionOpening(输出参数) :开运算后的区域功能:使用圆形结构元素对区域进行开运算参数: Region(输入参数) :输入区域 RegionOpening(输出参数) :开运算后的区域 Radius(输入参数) :圆形结构元素的半径功能:使用矩形结构元素对区域进行开运算。

程序员,他们想的是什么?他们想的永远都是技术,他们崇尚的也永远都是技术。 1619

Linux驱动开发入门与实战.part1资源文件介绍:Linux驱动开发入门教程,实战案例助你快速上手

Linux驱动开发入门与实战.part1资源文件介绍:Linux驱动开发入门教程,实战案例助你快速上手 去发现同类优质开源项目:https://gitcode.com/ 项目介绍 在当今技术快速发展的时代,Linux内核开发成为越来越多技术爱好者的追求。今天,我将为您推荐一款极具价值的开源项目——《Linux驱动开发入门与实战.part1》。这是一本专为Linux驱动开发初学者打造的教程资源,帮助...

gitblog_06785的博客 679

深度学习工具包 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")

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

入门Linux嵌入式底层驱动开发

Linux驱动开发入门学习

忙忙碌碌学编程 880

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

1. 驱动开发--基础知识

学无止境

weixin_43379278的博客 7234

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

上一篇: 【Linux驱动开发 ---- 1_Linux驱动开发基础】
下一篇: 【Linux驱动开发 ---- 2_深入理解内核模块】
南窗的雨
博客等级 码龄6年 687粉丝 97原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值