106925cdb4867024b3b5f54445be3ba895c352966mridge#!/bin/bash 206925cdb4867024b3b5f54445be3ba895c352966mridge 306925cdb4867024b3b5f54445be3ba895c352966mridge 406925cdb4867024b3b5f54445be3ba895c352966mridge############################################################## 506925cdb4867024b3b5f54445be3ba895c352966mridge# 606925cdb4867024b3b5f54445be3ba895c352966mridge# Copyright (c) International Business Machines Corp., 2003 706925cdb4867024b3b5f54445be3ba895c352966mridge# 806925cdb4867024b3b5f54445be3ba895c352966mridge# This program is free software; you can redistribute it and/or modify 906925cdb4867024b3b5f54445be3ba895c352966mridge# it under the terms of the GNU General Public License as published by 1006925cdb4867024b3b5f54445be3ba895c352966mridge# the Free Software Foundation; either version 2 of the License, or 1106925cdb4867024b3b5f54445be3ba895c352966mridge# (at your option) any later version. 1206925cdb4867024b3b5f54445be3ba895c352966mridge# 1306925cdb4867024b3b5f54445be3ba895c352966mridge# This program is distributed in the hope that it will be useful, 1406925cdb4867024b3b5f54445be3ba895c352966mridge# but WITHOUT ANY WARRANTY; without even the implied warranty of 1506925cdb4867024b3b5f54445be3ba895c352966mridge# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See 1606925cdb4867024b3b5f54445be3ba895c352966mridge# the GNU General Public License for more details. 1706925cdb4867024b3b5f54445be3ba895c352966mridge# 1806925cdb4867024b3b5f54445be3ba895c352966mridge# You should have received a copy of the GNU General Public License 1906925cdb4867024b3b5f54445be3ba895c352966mridge# along with this program; if not, write to the Free Software 204548c6cf9bcdd96d8303caa4130ab638b61f8a30Wanlong Gao# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 2106925cdb4867024b3b5f54445be3ba895c352966mridge# 2206925cdb4867024b3b5f54445be3ba895c352966mridge# FILE : sysfs.sh 2306925cdb4867024b3b5f54445be3ba895c352966mridge# USAGE : sysfs.sh [ -k <kernel_module> ] 2406925cdb4867024b3b5f54445be3ba895c352966mridge# 2506925cdb4867024b3b5f54445be3ba895c352966mridge# DESCRIPTION : A script that will test sysfs on Linux system. 2637550cf5a86c7ca7424a2a318dd64e550f13f5dfChris Dearman# REQUIREMENTS: CONFIG_DUMMY must have been used to build kernel, and the 2721294e18de04875dc599cdcaf4fb344d226feb6brobbiew# dummy network module must exist. 2806925cdb4867024b3b5f54445be3ba895c352966mridge# 2906925cdb4867024b3b5f54445be3ba895c352966mridge# HISTORY : 3006925cdb4867024b3b5f54445be3ba895c352966mridge# 06/24/2003 Prakash Narayana (prakashn@us.ibm.com) 3106925cdb4867024b3b5f54445be3ba895c352966mridge# 3206925cdb4867024b3b5f54445be3ba895c352966mridge# CODE COVERAGE: 31.3% - fs/sysfs (Total Coverage) 3306925cdb4867024b3b5f54445be3ba895c352966mridge# 3406925cdb4867024b3b5f54445be3ba895c352966mridge# 0.0% - fs/sysfs/bin.c 3506925cdb4867024b3b5f54445be3ba895c352966mridge# 61.8% - fs/sysfs/dir.c 3606925cdb4867024b3b5f54445be3ba895c352966mridge# 27.5% - fs/sysfs/file.c 3706925cdb4867024b3b5f54445be3ba895c352966mridge# 40.4% - fs/sysfs/inode.c 3806925cdb4867024b3b5f54445be3ba895c352966mridge# 41.2% - fs/sysfs/mount.c 3906925cdb4867024b3b5f54445be3ba895c352966mridge# 58.1% - fs/sysfs/symlink.c 4006925cdb4867024b3b5f54445be3ba895c352966mridge# 4106925cdb4867024b3b5f54445be3ba895c352966mridge############################################################## 4206925cdb4867024b3b5f54445be3ba895c352966mridge 4306925cdb4867024b3b5f54445be3ba895c352966mridge 4406925cdb4867024b3b5f54445be3ba895c352966mridgeMNT_POINT="/tmp/sysfs_$$" 4506925cdb4867024b3b5f54445be3ba895c352966mridge 4606925cdb4867024b3b5f54445be3ba895c352966mridgeKERNEL_NAME=`uname -a | awk ' { print $3 } '` 4706925cdb4867024b3b5f54445be3ba895c352966mridgeKERN_MODULE=/lib/modules/$KERNEL_NAME/kernel/drivers/net/dummy.ko 4806925cdb4867024b3b5f54445be3ba895c352966mridgeUSAGE="$0 [ -k <kernel_module> ]" 4906925cdb4867024b3b5f54445be3ba895c352966mridge 5006925cdb4867024b3b5f54445be3ba895c352966mridge 5106925cdb4867024b3b5f54445be3ba895c352966mridge############################################################## 5206925cdb4867024b3b5f54445be3ba895c352966mridge# 5306925cdb4867024b3b5f54445be3ba895c352966mridge# Make sure that uid=root is running this script. 5406925cdb4867024b3b5f54445be3ba895c352966mridge# Validate the command line arguments. 5506925cdb4867024b3b5f54445be3ba895c352966mridge# 5606925cdb4867024b3b5f54445be3ba895c352966mridge############################################################## 5706925cdb4867024b3b5f54445be3ba895c352966mridge 5806925cdb4867024b3b5f54445be3ba895c352966mridgeif [ $UID != 0 ] 5906925cdb4867024b3b5f54445be3ba895c352966mridgethen 6006925cdb4867024b3b5f54445be3ba895c352966mridge echo "FAILED: Must have root access to execute this script" 6106925cdb4867024b3b5f54445be3ba895c352966mridge exit 1 6206925cdb4867024b3b5f54445be3ba895c352966mridgefi 6306925cdb4867024b3b5f54445be3ba895c352966mridge 6406925cdb4867024b3b5f54445be3ba895c352966mridgewhile getopts k: args 6506925cdb4867024b3b5f54445be3ba895c352966mridgedo 6606925cdb4867024b3b5f54445be3ba895c352966mridge case $args in 6706925cdb4867024b3b5f54445be3ba895c352966mridge k) KERN_MODULE=$OPTARG ;; 6806925cdb4867024b3b5f54445be3ba895c352966mridge \?) echo $USAGE ; exit 1 ;; 6906925cdb4867024b3b5f54445be3ba895c352966mridge esac 7006925cdb4867024b3b5f54445be3ba895c352966mridgedone 7106925cdb4867024b3b5f54445be3ba895c352966mridge 7206925cdb4867024b3b5f54445be3ba895c352966mridgeif [ -z "$KERN_MODULE" ] 7306925cdb4867024b3b5f54445be3ba895c352966mridgethen 7406925cdb4867024b3b5f54445be3ba895c352966mridge echo $USAGE 7506925cdb4867024b3b5f54445be3ba895c352966mridge echo "FAILED: kernel module to insert not specified" 7606925cdb4867024b3b5f54445be3ba895c352966mridge exit 1 7706925cdb4867024b3b5f54445be3ba895c352966mridgefi 7806925cdb4867024b3b5f54445be3ba895c352966mridge 7906925cdb4867024b3b5f54445be3ba895c352966mridge# Here is the code coverage for fs/sysfs 8006925cdb4867024b3b5f54445be3ba895c352966mridge# insmod/rmmod net/dummy.ko creates and deletes a directory 8106925cdb4867024b3b5f54445be3ba895c352966mridge# under sysfs. 8206925cdb4867024b3b5f54445be3ba895c352966mridge# In kernel, 2.5.73 or higher, insert/delete base/firmware_class.ko 8306925cdb4867024b3b5f54445be3ba895c352966mridge 8406925cdb4867024b3b5f54445be3ba895c352966mridgemkdir -p -m 777 $MNT_POINT 8506925cdb4867024b3b5f54445be3ba895c352966mridgemount -t sysfs sysfs $MNT_POINT 8606925cdb4867024b3b5f54445be3ba895c352966mridgeif [ $? != 0 ] 8706925cdb4867024b3b5f54445be3ba895c352966mridgethen 8806925cdb4867024b3b5f54445be3ba895c352966mridge echo "FAILED: sysfs mount failed" 8906925cdb4867024b3b5f54445be3ba895c352966mridge exit 1 9006925cdb4867024b3b5f54445be3ba895c352966mridgefi 9106925cdb4867024b3b5f54445be3ba895c352966mridge 9206925cdb4867024b3b5f54445be3ba895c352966mridgeinsmod $KERN_MODULE 9306925cdb4867024b3b5f54445be3ba895c352966mridgeif [ $? != 0 ] 9406925cdb4867024b3b5f54445be3ba895c352966mridgethen 9506925cdb4867024b3b5f54445be3ba895c352966mridge umount $MNT_POINT 9606925cdb4867024b3b5f54445be3ba895c352966mridge rm -rf $MNT_POINT 9706925cdb4867024b3b5f54445be3ba895c352966mridge echo "FAILED: insmod failed" 9806925cdb4867024b3b5f54445be3ba895c352966mridge exit 1 9906925cdb4867024b3b5f54445be3ba895c352966mridgefi 10006925cdb4867024b3b5f54445be3ba895c352966mridge 10106925cdb4867024b3b5f54445be3ba895c352966mridgermmod $KERN_MODULE 10206925cdb4867024b3b5f54445be3ba895c352966mridgeif [ $? != 0 ] 10306925cdb4867024b3b5f54445be3ba895c352966mridgethen 10406925cdb4867024b3b5f54445be3ba895c352966mridge umount $MNT_POINT 10506925cdb4867024b3b5f54445be3ba895c352966mridge rm -rf $MNT_POINT 10606925cdb4867024b3b5f54445be3ba895c352966mridge echo "FAILED: rmmod failed" 10706925cdb4867024b3b5f54445be3ba895c352966mridge exit 1 10806925cdb4867024b3b5f54445be3ba895c352966mridgefi 10906925cdb4867024b3b5f54445be3ba895c352966mridge 11006925cdb4867024b3b5f54445be3ba895c352966mridge 11106925cdb4867024b3b5f54445be3ba895c352966mridge####################################################### 11206925cdb4867024b3b5f54445be3ba895c352966mridge# 11306925cdb4867024b3b5f54445be3ba895c352966mridge# Just before exit, perform the cleanup. 11406925cdb4867024b3b5f54445be3ba895c352966mridge# 11506925cdb4867024b3b5f54445be3ba895c352966mridge####################################################### 11606925cdb4867024b3b5f54445be3ba895c352966mridge 11706925cdb4867024b3b5f54445be3ba895c352966mridgeumount $MNT_POINT 11806925cdb4867024b3b5f54445be3ba895c352966mridgerm -rf $MNT_POINT 11906925cdb4867024b3b5f54445be3ba895c352966mridge 12006925cdb4867024b3b5f54445be3ba895c352966mridgeecho "PASSED: $0 passed!" 12106925cdb4867024b3b5f54445be3ba895c352966mridgeexit 0 122