major=$(awk "\\$2= =\"$module\" {print \\$1}" /proc/devices)正确理解。

Ubuntu 20.04 TensorFlow 2.10 环境基线构建指南 TensorFlow 是一个用于机器学习和深度学习的开源框架,其运行依赖严格的 Python 版本、系统库(如 glibc、CUDA)、以及第三方包(如 numpy、protobuf)的版本对齐。在 Ubuntu 20.04 这类长期支持(LTS)系统中,环境不稳定性往往源于系统 Python 与用户环境的耦合、pip 全局安装导致的依赖污染,以及 GPU 加速所需的 CUDA/cuDNN 版本错配。TensorFlow 2.10 作为最后一个内置 GPU 支持的稳定版本,要求 Python 3.9、pip 阅读详情

major=$(awk " \\$2= =\"$module\" {print  \\$1}" /proc/devices)正确理解。 收藏 
view plaincopy to clipboardprint?
major=$(awk " \\$2=  =\"$module\" {print  \\$1}" /proc/devices)  
major=$(awk " \\$2=  =\"$module\" {print  \\$1}" /proc/devices)
正确理解
--------------------------------------------------------------------------------
导语:
        这条语句来自O’REILLY 《LINUX设备驱动第三版》字符设备章节的自动创建设备文件脚本代码。网上所有的O’REILLY 《LINUX设备驱动第三版》的电子书上一律这条语句。当时这条语句放入脚本,运行怎么也有错误,就错在双斜杠的地方。
   后来买了一本纸质正版书拜读,竟然发现书上的代码以及配套源代码此处一律用的是单斜杠,就是$的地方只有一个反斜杠
   view plaincopy to clipboardprint?
major=$(awk "\$2==\"$module\" {print \$1}" /proc/devices)  
major=$(awk "\$2==\"$module\" {print \$1}" /proc/devices)

在我的linux上可以正确运行。我使用的是Fedora 9的2.6内核和Red  Hat 9的2.4的内核测试的。
      初学者刚刚开始读ldd3的时候,在关于动态创建设备文件的脚本的地方都感觉很困惑。那么通过我自己实际的操作反复验证之后得到了针对此语句主要疑难点做出如下解释:

1.此语句中awk使用了耍号“”,而没有使用单引号‘’
按照awk的规则和语法,awk整个语句由模式这操作两部分组成
     pattern     {action}     #如果模式匹配则执行操作
     pattern                      #如果模式匹配则执行打印
                    {action}     #针对每条记录执行操作
那么相像的说一条awk语句可以简化到
     A  -> B   #若A则B
那么任何脚本,awk也不例外,使用定界符比如:/(awk 正则表达式定界符),“”(字符串定界符)等等,其实最终是让解析程序认识。
在bash或者是shell脚本中,“”用双引号引起来的内容中允许变量替换,而用‘’单引号引起来的内容则不允许变量替换包括特殊符号。所以,这样看开究竟是用单引号还是双引号来定界内容其实是可以选择的,没有说必须是那种方式。

2.此语句中多次使用\反斜杠

目前我们说知道的脚本(bash,shell)都是使用\反斜杠来转义(SQL中有escape的说法),即是为了保证特殊字符当做普通字符来看。
结合语句和语法来看,对于awk,最终是要接收$1,$2,
我们以一个简单的例子来看,我们让一个脚本打印设备misc的设备号。不用这么复杂的条件模式,用一个简单的例子来说明这些论述
打印/proc/devices文件中名字为misc的设备号。
view plaincopy to clipboardprint?
[root@localhost feiyinziiu]# cat /proc/devices   
Character devices:   
  1 mem   
  2 pty   
  3 ttyp   
  4 ttyS   
  5 cua   
  6 lp   
  7 vcs   
 10 misc   
 13 input   
 29 fb   
 36 netlink   
128 ptm   
129 ptm   
130 ptm   
131 ptm  
[root@localhost feiyinziiu]# cat /proc/devices
Character devices:
  1 mem
  2 pty
  3 ttyp
  4 ttyS
  5 cua
  6 lp
  7 vcs
 10 misc
 13 input
 29 fb
 36 netlink
128 ptm
129 ptm
130 ptm
131 ptm

这是我的linux下devices的部分文件。按照awk字段来分,这里1,2,3….应该是$1,而后面的名字应该是$2。这是我的shell下键入命令后的效果
 
view plaincopy to clipboardprint?
[root@feiyinziiu fbin]# awk "\$2==\"misc\" {print \$1}" /proc/devices   
10   
[root@feiyinziiu fbin]# awk '$2=="misc" {print $1}' /proc/devices   
10  
[root@feiyinziiu fbin]# awk "\$2==\"misc\" {print \$1}" /proc/devices
10
[root@feiyinziiu fbin]# awk '$2=="misc" {print $1}' /proc/devices
10  
这是正确的结果。试想,如果我们对$不使用反斜杠。
view plaincopy to clipboardprint?
#!/bin/sh   
sf=$(awk "$2==\"misc\"   {print $1}" /proc/devices)   
echo $sf  
#!/bin/sh
sf=$(awk "$2==\"misc\"   {print $1}" /proc/devices)
echo $sf 
运行命令:
view plaincopy to clipboardprint?
[root@localhost feiyinziiu]# ./autoawk   
awk: cmd. line:1: =="misc"   {print }   
awk: cmd. line:1: ^ parse error   
                                                                                                                                
[root@localhost feiyinziiu]#  
[root@localhost feiyinziiu]# ./autoawk
awk: cmd. line:1: =="misc"   {print }
awk: cmd. line:1: ^ parse error
                                                                                                                             
[root@localhost feiyinziiu]#
这里报错。看看这句awk: cmd. line:1: =="misc"   {print },为什么==前是空,print后面也是空,不应该出现这种情况啊,因为我们明明用的事$2,$1啊,无论怎么说也不会是空啊。
不着急,我们再对脚本进行修改。
view plaincopy to clipboardprint?
#!/bin/sh   
sf=$(awk "$2==\"misc\"   {print $0}" /proc/devices)   
echo $sf  
#!/bin/sh
sf=$(awk "$2==\"misc\"   {print $0}" /proc/devices)
echo $sf 
我们只将后面$1改成了$0
运行命令:
view plaincopy to clipboardprint?
[root@localhost feiyinziiu]# ./autoawk   
awk: cmd. line:1: =="misc"   {print ./autoawk}   
awk: cmd. line:1: ^ parse error   
awk: cmd. line:1: =="misc"   {print ./autoawk}   
awk: cmd. line:1:                   ^ parse error   
awk: cmd. line:1: =="misc"   {print ./autoawk}   
awk: cmd. line:1:                     ^ unterminated regexp   
                                                                                                                                
[root@localhost feiyinziiu]#  
[root@localhost feiyinziiu]# ./autoawk
awk: cmd. line:1: =="misc"   {print ./autoawk}
awk: cmd. line:1: ^ parse error
awk: cmd. line:1: =="misc"   {print ./autoawk}
awk: cmd. line:1:                   ^ parse error
awk: cmd. line:1: =="misc"   {print ./autoawk}
awk: cmd. line:1:                     ^ unterminated regexp
                                                                                                                             
[root@localhost feiyinziiu]# 
现在再来看看报错情况。
view plaincopy to clipboardprint?
awk: cmd. line:1: =="misc"   {print ./autoawk}  
awk: cmd. line:1: =="misc"   {print ./autoawk} 
print后面出现了./autoawk
这是我们在bash命令行输入的。
现在我想你应该想到了,对于bash,shell脚本来说,$0,$1…等等,这些都是命令行输入参数的引用。
比如:
#  ./autoawk  a  b  c  d
那么,$0=./autoawk, $1=a, $2= b, $3 =c。这就开始明白了,如果我们不加反斜杠,那么$0,$1,$2就会被shell .bash当做它的参数,当脚本运行的时候,$0, $1, $2就会被替换成命令行参数。本来我们是想让awk接收的,现在却被shell,bash接收了替换了。为了不让$1,  $2被替换,我们在$前必须加反斜杠来禁止被替换 ,即\$1。禁止这种替换的另一种方法就是用单引号‘’,在脚本中‘’单引号内的内容按原样处理,不会有任何改变。
单引号和双引号作用的结果都能打印出相同的结果。唯一的区别是在于双引号需要对特殊字符转义,而单引号不需要。
awk "\$2= ="$module" {print \$1}" /proc/devices  #这里$module的引号没有特殊的用处,因为这里只是字符串的引用
awk ‘$2= ="$module" {print $1}’ /proc/devices
这两种方式达到的效果是一样的。

3.$前使用了双反斜杠 \\$

[root@feiyinziiu fbin]# awk "\$2==\"misc\" {print \$1}" /proc/devices
10
[root@feiyinziiu fbin]# awk '$2=="misc" {print $1}' /proc/devices
10
这里的演示都是在命令行里直接键入的。shell也好,bash也好,脚本文件最终是读入到命令解释器当中的。此地方用反斜杠无非就是保留特殊字符,按照正常情况,\$1就已经达到避免$1被替换的目的了,对于此处 \\$1,我觉得这是由于版本问题或者是其他原因,而且这种双斜杠运行时会提示错误,所以议这个地方还是以单反斜杠理解。至于到底此处当时为什么要用双反斜杠,只有去问魏永明了。
可以在OREILLY公布的驱动源码 ftp://ftp.ora.com/pub/examples/linux/drivers/中获得《LINUX设备驱动程序》的源代码。在我此时写到这个地方的时候,我又登陆了此服务器,发现里面仍然只有第二版的源码dd2-samples,还没有第三版的源码。ldd2-samples中scull下有个scull_load脚本。里面的关于自动创建设备节点的部分代码如下:
view plaincopy to clipboardprint?
#!/bin/sh   
module="scull"  
device="scull"  
mode="664"  
# Group: since distributions do it differently, look for wheel or use staff   
if grep '^staff:' /etc/group > /dev/null; then   
    group="staff"  
else  
    group="wheel"  
fi   
# invoke insmod with all arguments we got   
# and use a pathname, as newer modutils don't look in . by default   
/sbin/insmod -f ./$module.o $* || exit 1   
major=`cat /proc/devices | awk " \\$2= =\"$module\" {print  \\$1}"`   
# Remove stale nodes and replace them, then give gid and perms   
# Usually the script is shorter, it's scull that has several devices in it.   
rm -f /dev/${device}[0-3]   
mknod /dev/${device}0 c $major 0   
mknod /dev/${device}1 c $major 1   
mknod /dev/${device}2 c $major 2   
mknod /dev/${device}3 c $major 3   
ln -sf ${device}0 /dev/${device}   
chgrp $group /dev/${device}[0-3]    
chmod $mode  /dev/${device}[0-3]  
#!/bin/sh
module="scull"
device="scull"
mode="664"
# Group: since distributions do it differently, look for wheel or use staff
if grep '^staff:' /etc/group > /dev/null; then
    group="staff"
else
    group="wheel"
fi
# invoke insmod with all arguments we got
# and use a pathname, as newer modutils don't look in . by default
/sbin/insmod -f ./$module.o $* || exit 1
major=`cat /proc/devices | awk " \\$2= =\"$module\" {print  \\$1}"`
# Remove stale nodes and replace them, then give gid and perms
# Usually the script is shorter, it's scull that has several devices in it.
rm -f /dev/${device}[0-3]
mknod /dev/${device}0 c $major 0
mknod /dev/${device}1 c $major 1
mknod /dev/${device}2 c $major 2
mknod /dev/${device}3 c $major 3
ln -sf ${device}0 /dev/${device}
chgrp $group /dev/${device}[0-3] 
chmod $mode  /dev/${device}[0-3]
 
在我的纸质书同时于此书配套的源代码都是如下的代码:
 
view plaincopy to clipboardprint?
#!/bin/sh   
# $Id: scull_load,v 1.4 2004/11/03 06:19:49 rubini Exp $   
module="scull"  
device="scull"  
mode="664"  
# Group: since distributions do it differently, look for wheel or use staff   
if grep -q '^staff:' /etc/group; then   
    group="staff"  
else  
    group="wheel"  
fi   
# invoke insmod with all arguments we got   
# and use a pathname, as insmod doesn't look in . by default   
/sbin/insmod ./$module.ko $* || exit 1   
# retrieve major number   
major=$(awk "\$2==\"$module\" {print \$1}" /proc/devices)   
# Remove stale nodes and replace them, then give gid and perms   
# Usually the script is shorter, it's scull that has several devices in it.   
rm -f /dev/${device}[0-3]   
mknod /dev/${device}0 c $major 0   
mknod /dev/${device}1 c $major 1   
mknod /dev/${device}2 c $major 2   
mknod /dev/${device}3 c $major 3   
ln -sf ${device}0 /dev/${device}   
chgrp $group /dev/${device}[0-3]    
chmod $mode  /dev/${device}[0-3]   
rm -f /dev/${device}pipe[0-3]   
mknod /dev/${device}pipe0 c $major 4   
mknod /dev/${device}pipe1 c $major 5   
mknod /dev/${device}pipe2 c $major 6   
mknod /dev/${device}pipe3 c $major 7   
ln -sf ${device}pipe0 /dev/${device}pipe   
chgrp $group /dev/${device}pipe[0-3]    
chmod $mode  /dev/${device}pipe[0-3]   
rm -f /dev/${device}single   
mknod /dev/${device}single  c $major 8   
chgrp $group /dev/${device}single   
chmod $mode  /dev/${device}single   
rm -f /dev/${device}uid   
mknod /dev/${device}uid   c $major 9   
chgrp $group /dev/${device}uid   
chmod $mode  /dev/${device}uid   
rm -f /dev/${device}wuid   
mknod /dev/${device}wuid  c $major 10   
chgrp $group /dev/${device}wuid   
chmod $mode  /dev/${device}wuid   
rm -f /dev/${device}priv   
mknod /dev/${device}priv  c $major 11   
chgrp $group /dev/${device}priv   
chmod $mode  /dev/${device}priv  
#!/bin/sh
# $Id: scull_load,v 1.4 2004/11/03 06:19:49 rubini Exp $
module="scull"
device="scull"
mode="664"
# Group: since distributions do it differently, look for wheel or use staff
if grep -q '^staff:' /etc/group; then
    group="staff"
else
    group="wheel"
fi
# invoke insmod with all arguments we got
# and use a pathname, as insmod doesn't look in . by default
/sbin/insmod ./$module.ko $* || exit 1
# retrieve major number
major=$(awk "\$2==\"$module\" {print \$1}" /proc/devices)
# Remove stale nodes and replace them, then give gid and perms
# Usually the script is shorter, it's scull that has several devices in it.
rm -f /dev/${device}[0-3]
mknod /dev/${device}0 c $major 0
mknod /dev/${device}1 c $major 1
mknod /dev/${device}2 c $major 2
mknod /dev/${device}3 c $major 3
ln -sf ${device}0 /dev/${device}
chgrp $group /dev/${device}[0-3] 
chmod $mode  /dev/${device}[0-3]
rm -f /dev/${device}pipe[0-3]
mknod /dev/${device}pipe0 c $major 4
mknod /dev/${device}pipe1 c $major 5
mknod /dev/${device}pipe2 c $major 6
mknod /dev/${device}pipe3 c $major 7
ln -sf ${device}pipe0 /dev/${device}pipe
chgrp $group /dev/${device}pipe[0-3] 
chmod $mode  /dev/${device}pipe[0-3]
rm -f /dev/${device}single
mknod /dev/${device}single  c $major 8
chgrp $group /dev/${device}single
chmod $mode  /dev/${device}single
rm -f /dev/${device}uid
mknod /dev/${device}uid   c $major 9
chgrp $group /dev/${device}uid
chmod $mode  /dev/${device}uid
rm -f /dev/${device}wuid
mknod /dev/${device}wuid  c $major 10
chgrp $group /dev/${device}wuid
chmod $mode  /dev/${device}wuid
rm -f /dev/${device}priv
mknod /dev/${device}priv  c $major 11
chgrp $group /dev/${device}priv
chmod $mode  /dev/${device}priv
《LINUX设备驱动》官方公布了2种不同的反斜杠,应该说明是对第二版本的修订。

本文来自优快云博客,转载请标明出处: http://blog.youkuaiyun.com/feiyinzilgd/archive/2010/02/01/5276871.aspx

Linux下fastai Chapter 4多卡训练排障实战指南 分布式深度学习训练在Linux生产环境中的落地,本质是PyTorch分布式(DDP)、NCCL通信协议与Linux内核调度机制的协同问题。理解CUDA运行时与NVIDIA驱动的版本锁链、NCCL后端在无InfiniBand环境下的行为漂移、DataLoader与CFS调度器的资源竞争关系,是解决‘显存显示正常却OOM’‘nccl timeout’‘worker卡死’等典型故障的技术前提。本文聚焦fastai Chapter 4在Ubuntu+多GPU集群中的系统级适配,覆盖硬件审计、环境校验、NCCL最小可 阅读详情

相关推荐

Linux存储四层架构:块设备、分区、文件系统与挂载点详解

Linux存储体系基于分层抽象设计,核心包含块设备(block device)、分区(partition)、文件系统(filesystem)和挂载点(mount point)四个逻辑层级。块设备是内核对物理存储的统一接口,提供扇区级读写能力;分区在块设备上建立逻辑边界,由MBR或GPT表管理;文件系统则定义数据组织方式,如ext4、XFS等,负责inode、目录树与元数据管理;挂载点将文件系统接入VFS树,实现用户态可见路径。这一架构决定了磁盘识别、格式化、挂载及故障排查的技术路径——例如`lsblk`输出

weixin_30788619的博客 350

major=$(awk "//$2= =/"$module/" {print //$1}" /proc/devices)正确理解。

Normal 0 7.8 磅 0 2 false false false MicrosoftInternetExplorer4 <! /* Style Definiti

Legend(谭海燕)的专栏 4769

【14】spi

USERCODE是cpld芯片一块独立区域,类似芯片寄存器,不管主还是备,如果cpld fw文件里没有包含 Program USERCODE cmd (如下图),USERCODE这一块是不会变化的。:发送一个命令字节进入dual mode,这样MOSI复用成SIO0(serial io0),MISO复用成SIO1(serial io1),这样一个时钟周期内就能传输2个bit数据。M(master)I(input),生成时钟和ss线(片选同一时刻只有一个有效,保证数据不干扰)由主设备管理。

持续更新ing... 1287

实验七 驱动开发编程

实验七 驱动开发编程 实验目的: 掌握设备驱动程序开发方法 掌握驱动的加载和卸载 实验内容: 编写字符驱动程序,这里的设备是一段内存,实现简单的读写功能 编写Makefile以及驱动的加载和卸载脚本

KeepSilent的博客 1179

音频降采样系数

如果需要把8K, 16K, 32K, 48K采样率的音频数据降为4K的音频数据, 最简单的方法根据降频倍数来取点, 但是线性度不好. 另一种线性度好一点的方法是: 取适当个数的点数, 各点乘以各自点的系数, 然后相加取平均值. 降频倍数与系数的关系如下: 2倍:     {0.3, 0.4, 0.3} 4倍:    {0.15, 0.2, 0.3, 0.2, 0.15} 8倍:   {0

joans123的专栏 4646

GIS坐标系转换以及空间校正和地理配准

许多小伙伴都对坐标系,投影这类问题迷迷糊糊,我之前也一样,现在总结一下。 坐标系的转换1.为什么要进行坐标系的转换?2. 不同坐标系的介绍1.地理坐标系我国常见的地理坐标(1).北京54坐标系(2).西安80坐标系(3).WGS-84坐标系(4).大地2000坐标系2.投影坐标系我国常用的投影坐标系(1) UTM投影(2) 高斯-克吕格投影(3) 兰伯特投影(4) 阿尔伯斯投影投影坐标系的选择3. 坐标系的转换1.已知坐标系之间的转换1.1 两坐标系的参考椭球相同1.2 两坐标系的参考椭球不一致,但是GIS

m0_47258611的博客 8913

awk中{print $1}什么意思

给你举个例子,echo "aa bb cc" | awk -F '{print $1}' 结果就是aa,意思是把字符串按空格分割,取第一个,自己做个测试就明白了!awk是用来提取列的主要工具;{print $1}就是将某一行(一条记录)中以空格为分割符的第一个字段打印出来...

weixin_33701564的博客 3317

交叉编译Qt6.5.3(RK3568开发板)

注意,如果使用其它版本的交叉编译器的话,请确保你的交叉编译器能够支持 C++17标准。为确保后续交叉编译没问题,需要确保开发板使用的GLIBC版本不小于2.34版本。到 linaro 网站上下载交叉编译工具,我下载的是 gcc-linaro-11.3.1-2022.06-x86_64_aarch64-linux-gnu.tar.xz。安装 CMake ,最低要求3.16版本,如果要静态编译,需要3.21及以上版本。我使用的3.27版本。:指定为最后交叉编译后的Qt6.5.3库的安装目录。

m0_46309425的博客 5102

awk 用法(使用入门)

awk 用法:awk ' pattern {action} '   变量名    含义  ARGC   命令行变元个数  ARGV   命令行变元数组  FILENAME   当前输入文件名  FNR   当前文件中的记录号  FS   输入域分隔符,默认为一个空格  RS   输入记录分隔符  NF   当前记录里域个数  NR   到目前为止记录数  OFS   输出域

fei的专栏 2169

电驱系统功率级“多合一”解决方案

如何提升电驱动系统的产品性能、减小能耗和进一步轻量化,以加强整车市场竞争力,是摆在国内外新能源车企面前的共同课题。为此,具有多年动力总成电子系统开发经验的美国著名半导体及电子解决方案专家——德州仪器(Texas Instrument)提出了多种功率级别“多合一”整合方案和设计思路,助力新能源车企提升技术优势。

yessunday的专栏 1370

Qualcomm工具的使用

简介   由于我们公司主要是以高通平台为主,所以工具的使用是必不可少的,包括QPST、QRCT3、QXDM、QDART等。   高通工具顾名思义就是,对于高通平台的软件开发进行软件的烧录,软件的调试,软件的Log的抓取和分析过程,像我们平常用的大致就是烧版本、改NV、制作QCN、然后校准、强发强收等操作。 QPST   QPST主要是用来做一些参数的配置,包括EFS文件的编辑,QCN的导入和备份与...

Jimmy 2万+

awk 中 {print $1} 什么意思

举个例子 echo "aa bb cc" | awk -F '{print $1}' 结果就是aa,意思是把字符串按空格分割,取第一个。 awk 是用来提取列的主要工具; {print $1} 就是将某一行(一条记录)中以空格为分割符的第一个字段打印出来。 转自:https://www.cnblogs.com/senior-engineer/p/6203621.html...

愿我如星君如月 ... 夜夜流光相皎洁 ... 3万+

uniapp:解决微信小程序包体积超过2M的优化方案+详解分包问题,编译小程序体积大于2M不能上传和预览提示体积太大的处理教程,uniApp微信小程序主包过大问题如何解决(排查可疑点+分包+最小改动)

uniapp微信小程序开发,如何解决打包太大无法预览发布的问题,uniApp微信小程序包体积超过2M的优化方法,uni-app打包微信小程序主包超2M终极解决方案,使用uniapp开发微信小程序使用uni_modules导致主包文件过大,无法发布的解决方法,UniApp开发的微信小程序主包过大问题及解决方案 编译小程序时Node-modules被打入主包,小程序体积大于2M不能上传和预览,怎么处理,解决微信小程序主包太大问题,微信小程序中主包和分包过大,详解分包问题,uni-app 微信小程序发布时,主包超

✅ 精选推荐文章 5066

LDD中 major=$(awk "\\$2= =\"$module\" {print \\$1}" /proc/devices)正确理解。

major=$(awk "\\$2= =\"$module\" {print \\$1}" /proc/devices)正确理解。 major=$(awk "\\$2= =\"$module\" {print \\$1}" /proc/devices) 正确理解 导语:         这条语句来自O’REILLY 《LINUX设备驱动第三版》字符设备

chepwavege的专栏 2907

【异常】解决 Cursor 报错 Unexpected seqno: 2 != 1. Please try again, or contact support if the issue 的排坑指南

在使用 Cursor 辅助编程时,你是否遇到过 AI 突然中断输出,并在右下角弹出一个红色的 Network Error 弹窗?今天我们就来彻底解析并解决这个网络断连问题。

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

RK3588平台开发系列讲解(USB篇)UAC初识

📢本篇将介绍RK3588平台`UAC`的配置使用。

内核笔记 3880

major=$(awk "\\$2= =\"$module\" {print \\$1}" /proc/devices)正确理解

major=$(awk "\\$2= =\"$module\" {print \\$1}" /proc/devices)正确理解。 收藏 view plaincopy to clipboardprint?major=$(awk "\\$2= =\"$module\" {print \\$1}" /proc/devices) major=$(awk "\\$2= =\"$...

weixin_33748818的博客 157

IMSL CNL 7.0.0 (x86-64)Crack

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

major=$(awk "\\$2==\"$module\"正确理解

major=$(awk "\\$2=  =\"$module\" {print \\$1}" /proc/devices)   major=$(awk "\\$2= =\"$module\" {print \\$1}" /proc/devices) 正确理解 导语:         这条语句来自O’REILLY 《LINUX设备驱动第三版》字符设备章节的自动

thinkinwm的专栏 1352

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

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

Ubuntu 16.04下用mdadm构建生产级软RAID实战指南

RAID(独立磁盘冗余阵列)是保障数据高可用与性能扩展的基础存储技术,其核心原理在于通过条带化、镜像或校验算法,在多块物理磁盘间实现数据分布与容错。Linux 软 RAID 借助内核 md 模块与 mdadm 工具链,提供比硬件 RAID 更透明、可审计、跨平台兼容的实现方式,尤其适合对控制权和可观测性要求严苛的生产环境。该技术具备零厂商锁定、细粒度监控(如 /proc/mdstat 实时状态)、标准化元数据迁移等独特价值,广泛应用于Web服务、数据库存储、日志归档及备份系统等场景。本文聚焦 Ubuntu

weixin_34241036的博客 425

IEM模型,地表粗糙度模拟

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

Ubuntu 18.04下ROS2 Dashing源码安装实战指南

ROS2是面向机器人系统的中间件框架,其核心依赖于DDS通信、CMake构建系统与Python绑定机制。理解ROS2的ABI稳定性、ament构建流程和跨版本兼容性,是保障工业现场7×24小时稳定运行的技术基础。在Ubuntu 18.04这类长期服役的LTS系统中,官方二进制包早已停止更新,必须通过源码编译实现GCC 7.5适配、Python 3.6环境锁定及FastRTPS 1.8.2 ABI对齐。该过程不仅涉及cmake工具链调优、zram内存优化与pkg-config路径修复,更深层考验开发者对Lin

迷彩风情 483

Ubuntu 14.04 部署 Graylog2 v2.5 实战指南

日志集中化是现代运维的基础能力,其核心在于统一采集、结构化存储与可检索分析。Graylog 作为轻量级开源日志平台,凭借对 Syslog/GELF 协议的原生支持、低依赖架构和简易认证机制,在资源受限或系统锁定场景中展现出独特价值。尤其在老旧操作系统如 Ubuntu 14.04(Trusty Tahr)环境下,Graylog2 v2.5.x 仍能稳定运行于 Java 7 和 Elasticsearch 5.6,无需 Docker 或 systemd,规避了 agent 认证失败、JVM 版本不兼容等高频问题

weixin_30932215的博客 408

Q8量化CPU推理:让Llama3/Qwen2在i5笔记本上秒级响应

大语言模型推理不再依赖GPU,CPU本地化部署正成为教育、边缘计算与个人开发的关键路径。基于INT8量化、AVX-512/VNNI指令加速与内存映射分页加载等核心技术,Q8-Chat实现了7B–13B模型在主流Intel CPU上的低延迟高吞吐推理——首token<800ms、持续生成达9+ tokens/s。其核心价值在于平衡精度与效率,在AlpacaEval和MT-Bench中精度衰减仅1.2%,显著优于Q4方案;同时兼容Linux/WSL2环境,无需驱动或云服务。适用于高校AI教学、嵌入式RAG系统及

chiman6219的博客 389

Linux内核架构与开发环境搭建实战指南

操作系统内核是计算机系统的核心组件,负责管理硬件资源和提供基础服务。Linux内核采用模块化设计,包含进程管理、内存管理、虚拟文件系统等核心子系统,通过系统调用接口为用户程序提供服务。在开发环境搭建方面,需要配置完整的工具链(如gcc、make等),并掌握内核源码获取、配置与编译技巧。对于内核模块开发,需理解字符设备驱动实现原理,并合理使用自旋锁、信号量等同步机制。调试时可借助printk、ftrace等工具进行问题定位,性能优化则涉及调度器选择、内存参数调整等关键技术。这些知识对于从事嵌入式开发、系统调优

weixin_30652897的博客 336

CentOS 6 添加 Swap 分区:原理、避坑与生产级实操

Swap 是 Linux 内存管理的核心机制,本质是内核在物理内存紧张时用于暂存匿名页的磁盘缓冲区,而非简单的‘虚拟内存扩展’。其工作原理依赖于 page reclaim 策略、swappiness 权重计算及 swap header 元数据结构,在 CentOS 6(内核 2.6.32)中表现尤为特殊:swappiness=0 并不禁止 swap,而仅改变页回收倾向;文件型 swap 因 ext4 双重寻址引发 I/O 飙升;外挂硬盘因设备名漂移和 UUID 缺失导致启动失败。技术价值在于防止 OOM 崩

weixin_33860553的博客 369

Ubuntu 16.04 LVM实战:解决设备漂移、在线扩容与MySQL快照备份

逻辑卷管理(LVM)是一种将物理存储抽象为灵活逻辑单元的核心技术,其核心原理在于通过物理卷(PV)、卷组(VG)和逻辑卷(LV)三层架构实现存储资源的动态分配与解耦。该技术显著提升存储管理效率与系统可靠性,尤其适用于多磁盘混插、USB热插拔、数据库高可用等复杂场景。在Ubuntu 16.04这一长期支持但设备命名不稳定的发行版中,LVM可有效规避/dev/sdb设备名漂移问题,并支撑MySQL快照备份、在线扩容等关键运维能力,成为生产环境应对物理存储约束的必备基础设施。

weixin_34321753的博客 448
上一篇: ubuntu安装eclipse、jre、cdt配置C++开发环境
下一篇: 彩色成像原理和vonK iies 色适应理论
无敌二货
博客等级 码龄17年 196粉丝 55原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值