lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [day] [month] [year] [list]
Date:	Sun, 27 Sep 2015 05:16:41 -0500
From:	Mike Mestnik <cheako@...emestnik.net>
To:	linux-kernel@...r.kernel.org
Subject: [script] New driver boilerplace, please check hints welcomed.

Hello,
  I wonder if this perl script creates a good foundation for starting
a new driver.  I specifically wonder if I managed to choose the right
includes and understood the folder scheme.

I must apologize English is my native language, but I can normally
only communicate with computers.  That's why I wrote a script instead
of an article describing the steps I've taken.

http://pastebin.com/46NSXaBD

#!/usr/bin/env perl

use common::sense;
use Getopt::Std;
use File::Path qw(make_path remove_tree);
use File::Copy;

our($opt_n, $opt_v, $opt_s, $opt_H, $opt_l);
getopts('n:v:sH:l:');

$opt_n && $opt_v || die 'n and v requiered.';
my $p = ($opt_s ? '/usr' : '~') . "/src/${opt_n}-${opt_v}";
make_path("$p/patches") >= 0 || die "make_path: Failed to create $p: $!";

my $optl = $opt_l ? "/kernel/$opt_l" : "/kernel/drivers/$opt_n";
my $o;
open($o, ">$p/dkms.conf") or die "Can't open dkms.conf: $!\n";
print $o <<here;
PACKAGE_NAME="$opt_n"
PACKAGE_VERSION="$opt_v"
BUILT_MODULE_NAME[0]="$opt_n"
DEST_MODULE_LOCATION[0]="$optl"
here
close $o;

open($o, ">$p/${opt_n}.c") or die "Can't open ${opt_n}.c: $!\n";
print $o <<'here';
/*
 *
here
if($opt_H){
        open my $fh, '<', \$opt_H or die $!;
        print $o qq{ *${("\n"," $_")[$_ ne '']}}
                while (<$fh>);
        close $fh;
} else { print $o " * \n"; }
print $o <<'here';
 *
 */

here
close $o;

copy("$p/${opt_n}.c","$p/${opt_n}.h") or die "Can't copy ${opt_n}.c: $!\n";

my $_optn = $opt_n;
$_optn =~ y/-/_/s;
my $u_optn = uc$_optn;
open($o, ">>$p/${opt_n}.h") or die "Can't open ${opt_n}.h: $!\n";
print $o qq{#define ${u_optn}_VERSION "$opt_v"\n\n};
close $o;

open($o, ">>$p/${opt_n}.c") or die "Can't reopen ${opt_n}.c: $!\n";
print $o <<here;
#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/slab.h>
#include <linux/init.h>
#include <linux/types.h>

#include "${opt_n}.h"

MODULE_AUTHOR();
MODULE_DESCRIPTION();
MODULE_LICENSE();
MODULE_VERSION(${u_optn}_VERSION);

// static ...
// module_param(..., uint, 0);
// MODULE_PARM_DESC(..., "");

static void ${_optn}_exit(void)
{

        return;
}

static void ${_optn}_init(void)
{

        return;
}

module_init(${_optn}_init);
module_exit(${_optn}_exit);
here
close $o;

open($o, ">$p/Kconfig") or die "Can't open ${opt_n}.c: $!\n";
print $o <<here;
#
# $opt_n $opt_v
#

config ${u_optn}
        tristate "$opt_n $opt_v"
#       depends on
#       select
        ---help---
          Some inspiering text.

here
close $o;

open($o, ">$p/Makefile") or die "Can't open ${opt_n}.c: $!\n";
print $o <<here;
obj-m := ${opt_n}.o

KVER  ?= \$(shell uname -r)

KDIR ?= /lib/modules/\$(KVER)/build
MDIR ?= /lib/modules/\$(KVER)$optl

PWD := \$(shell pwd)

default:
        \$(MAKE) -C \$(KDIR) SUBDIRS=\$(PWD) \$(obj-m:.o=.ko)

install:
        install -d \$(MDIR)
        install -m 644 -c \$(obj-m:.o=.ko) \$(MDIR)
        depmod -a

clean:
        \$(MAKE) -C \$(KDIR) SUBDIRS=\$(PWD) \$(obj-m:.o=.ko) clean
        rm -rf *.mod.c *.o *.ko .tmp_versions Module.symvers .\$(obj-m:.o=)*
        rm -rf linux/.*o.cmd linux/*.o

here
close $o;

exit;

1;
__END__
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ