linux驱动学习笔记(2.4) scull 脚本scull_init
向自己道歉,没能抽出更多的时间,进度如此的慢。
现在想认真学习下scull模块的这个初始化脚本 scull_init.sh
#!/bin/bash
# Sample init script for the a driver module <rubini@linux.it>DEVICE="scull"
SECTION="misc"# The list of filenames and minor numbers: $PREFIX is prefixed to all names
PREFIX="scull"
FILES=" 0 0 1 1 2 2 3 3 priv 16 pipe0 32 pipe1 33 pipe2 34 pipe3 35single 48 uid 64 wuid 80"INSMOD=/sbin/insmod; # use /sbin/modprobe if you preferfunction device_specific_post_load () {true; # fill at will
}
function device_specific_pre_unload () {true; # fill at will
}# Everything below this line should work unchanged for any char device.
# Obviously, however, no options on the command line: either in
# /etc/${DEVICE}.conf or /etc/modules.conf (if modprobe is used)# Optional configuration file: format is
# owner <ownername>
# group <groupname>
# mode <modename>
# options <insmod options>
CFG=/etc/${DEVICE}.conf# kernel version, used to look for modules
KERNEL=`uname -r`#FIXME: it looks like there is no misc section. Where should it be?
MODDIR="/lib/modules/${KERNEL}/kernel/drivers/${SECTION}"
if [ ! -d $MODDIR ]; then MODDIR="/lib/modules/${KERNEL}/${SECTION}"; fi
#专有命令[ (左中括号, 特殊字符). 这个命令与test命令等价, 并且出于效率上的考虑, 这是一个内建命令
# -d FILE FILE exists and is a directory# Root or die
if [ "$(id -u)" != "0" ]
thenecho "You must be root to load or unload kernel modules"exit 1
fi# Read configuration file
if [ -r $CFG ]; then
# -r FILE FILE exists and read permission is granted
#看到这儿了,
OWNER=`awk "\\$1==\"owner\" {print \\$2}" $CFG`
#读取文件$CFG 若第一个域为owner,则打印第二个域,并赋值到变量OWNER
#但是这条指令在shell里未能正常运行,改为如下:类似的样子
# awk '$1=="DEVICE" {print $2}' scull.init
GROUP=`awk "\\$1==\"group\" {print \\$2}" $CFG`MODE=`awk "\\$1==\"mode\" {print \\$2}" $CFG`# The options string may include extra blanks or only blanksOPTIONS=`sed -n '/^options / s/options //p' $CFG`
#打印包含options的行
fi# Create device files
function create_files () {cd /devlocal devlist=""
local file
#如果变量用local来声明,那么它只能在该变量声明的代码块(block of code)中可见
while true; doif [ $# -lt 2 ]; then break; fi
#$# Number of command-line arguments or positional parameters -lt 小于
file="${DEVICE}$1"mknod $file c $MAJOR $2devlist="$devlist $file"shift 2
#The shift command reassigns the positional parameters, in effect shifting them to the left one notch
doneif [ -n "$OWNER" ]; then chown $OWNER $devlist; fiif [ -n "$GROUP" ]; then chgrp $GROUP $devlist; fiif [ -n "$MODE" ]; then chmod $MODE $devlist; fi
# -n STRING the length of STRING is nonzero
}# Remove device files
function remove_files () {cd /devlocal devlist=""local filewhile true; doif [ $# -lt 2 ]; then break; fifile="${DEVICE}$1"devlist="$devlist $file"shift 2donerm -f $devlist
}# Load and create files
function load_device () {if [ -f $MODDIR/$DEVICE.o ]; then
#-f FILE exists and is a regular file
devpath=$MODDIR/$DEVICE.oelse if [ -f ./$DEVICE.o ]; thendevpath=./$DEVICE.oelsedevpath=$DEVICE; # let insmod/modprobe guessfi; fiif [ "$devpath" != "$DEVICE" ]; thenecho -n " (loading file $devpath)"fiif $INSMOD $devpath $OPTIONS; thenMAJOR=`awk "\\$2==\"$DEVICE\" {print \\$1}" /proc/devices`remove_files $FILEScreate_files $FILESdevice_specific_post_loadelseecho " FAILED!"fi
}# Unload and remove files
function unload_device () {device_specific_pre_unload /sbin/rmmod $DEVICEremove_files $FILES
}case "$1" instart)echo -n "Loading $DEVICE"load_deviceecho ".";;stop)echo -n "Unloading $DEVICE"unload_deviceecho ".";;force-reload|restart)echo -n "Reloading $DEVICE"unload_deviceload_deviceecho ".";;*)echo "Usage: $0 {start|stop|restart|force-reload}"exit 1
esacexit 0
转载于:https://www.cnblogs.com/fly-fish/archive/2011/08/25/2153886.html
linux驱动学习笔记(2.4) scull 脚本scull_init相关推荐
- Linux 驱动学习笔记 - beep(九)
Linux 驱动学习笔记 - beep(九) 本系列均为正点原子 Linux 驱动的学习笔记, 以便加深笔者记忆.如读者想进一步学习,可以到正点原子官网中下载资料进行学习. 添加 pinctrl 节点 ...
- IMX6ULL嵌入式Linux驱动学习笔记(二)
IMX6ULL嵌入式Linux驱动学习 一.字符设备驱动 二.驱动模块的加载与卸载 三.字符设备的注册与注销 四.设备号 五.file_operations的具体实现 六.字符设备驱动框架 七.编写应 ...
- Linux驱动学习笔记
驱动学习笔记 1.字符设备驱动 Linux 驱动有两种运行方式 第一种就是将驱动编译进 Linux 内核中,这样当 Linux 内核启 动的时候就会自动运行驱动程序. 第二种就是将驱动编译成模块(Li ...
- 讯为4412开发板Linux驱动学习笔记
驱动理论专题一 Linux驱动程序的基本认识 有了内存管理单元,就有虚拟地址,物理地址. 驱动理论专题二 学会查看原理图 以LED2为示例 通过原理图查看到KP_COL0,赋予高电平则能点亮LED2, ...
- linux驱动学习笔记(三)阻塞与非阻塞IO
Linux驱动中阻塞与非阻塞IO 前言 阻塞 非阻塞 一.等待队列 1.等待队列头 2.等待队列 模板 二.轮询 模板 总结 前言 阻塞和非阻塞io是两种不同的设备访问方式. 阻塞 阻塞IO表示在执行 ...
- Linux驱动学习笔记之触摸屏驱动
触摸屏归纳为输入子系统,这里主要是针对电阻屏,其使用过程如下 当用触摸笔按下时,产生中断. 在中断处理函数处理函数中启动ADC转换x,y坐标. ADC结束,产生ADC中断 在ADC中断处理函数里上报( ...
- Linux驱动学习笔记之并发控制
Linux 设备驱动中必须解决的一个问题是多个进程对共享资源的并发访问,并发访问会导致竞态. 并发(concurrency)指的是多个执行单元同时.并行被执行,而并发的执行单元对共享资源(硬件资源和软 ...
- linux显示3个字符,Linux驱动学习笔记(3)字符设备驱动
今天对程序进行编译,结果出现 make -C /lib/modules/3.3.2-6.fc16.x86_64/build M=/home/jqzeng/workSpace/ldd3/ldd3-sam ...
- Linux驱动学习笔记 -- 驱动总线实验
驱动总线 在Linux系统中,除了硬件总线,还有一种软件虚拟出来的总线 – 驱动总线bus 这种驱动总线的作用:软件与硬件代码分离,提高程序的复用性 驱动总线分三个部分: 三者都是在/include/ ...
最新文章
- Camera HDR Algorithms
- LeetCode刷题记录9——58. Length of Last Word(easy)
- 核函数K(kernel function)
- GT Transceiver中的重要时钟及其关系(5)QPLL的工作原理介绍
- LeetCode Minimum Moves to Equal Array Elements II
- mybatis逆向工程生成的实体类和表不一致缺少某些字段或者出现其他字段
- 【阿里云北京峰会】一图看懂阿里云GPU实例如何帮助企业在AI应用赛道上加速...
- Java设计模式-工厂模式(3)抽象工厂模式
- 源码解析 Netty Channel接口及其实现类
- python编程单片机_Micro Python:用Python语言控制单片机
- 07-爬虫验证码破解实战
- cairo填充_Cairo 图形指南 (5) —— 形状与填充
- [AngularJS]--基本用法
- nero linux4 序列号,Nero Linux 4 Nero Linux v4.0.0.0b
- TikTok选品有什么技巧?
- Google 广告考试试题
- 怎么屏蔽还有照片_在朋友圈发男神照片没屏蔽父母,老妈的回应亮了
- 我,在日本开密室逃脱,钱还没赚,人进“橘子”了……
- solr引入mysql数据库数据,出现Requests: 1, Fetched: 0, Skipped: 0, Processed: 0
- 听说你想进大厂?当心这13个MySQL送命题!
热门文章
- docker 虚拟机搭建mongodb一主一从一复制_Docker最全教程——MongoDB容器化(十三)...
- ad16自动布线设置规则_Cadence的allegro下设置阻抗
- 【开发环境】Ubuntu 中使用 VSCode 开发 C/C++ ③ ( 创建工程目录 | 添加 C++ 源代码 | 代码自动提示 )
- 【数字信号处理】傅里叶变换性质 ( 序列傅里叶变换共轭对称性质 | x(n) 分解为实部序列与虚部序列 | 实部傅里叶变换 | 虚部傅里叶变换 | 共轭对称傅里叶变换 | 共轭反对称傅里叶变换 )
- 【Groovy】MOP 元对象协议与元编程 ( Groovy 类内部和外部分别获取 metaClass | 分析获取 metaClass 操作的字节码 | HandleMetaClass 注入方法 )
- 【C 语言】文件操作 ( 配置文件读写 | 框架搭建 | 头文件定义 | 头文件导入限制 | 兼容 C++ 语言 | 函数形参输入输出属性注释)
- 【Windows 逆向】CheatEngine 工具 ( CheatEngine 简介 | 使用 Lazarus 编译 CE 源码 | CheatEngine 相关文档资料 )
- 【EventBus】发布-订阅模式 ( 使用代码实现发布-订阅模式 )
- 【Flutter】Flutter Gallery 官方示例简介 ( 项目简介 | 工程构建 )
- Linux系统的基本命令