├── .project
└── src
├── ktool.go
└── mmake.cpp
/.project:
--------------------------------------------------------------------------------
1 |
2 |
3 | ktool
4 |
5 |
6 |
7 |
8 |
9 | com.googlecode.goclipse.goBuilder
10 |
11 |
12 |
13 |
14 |
15 | goclipse.goNature
16 |
17 |
18 |
--------------------------------------------------------------------------------
/src/ktool.go:
--------------------------------------------------------------------------------
1 | //-------------------------------------------------------------------
2 | // ktool.go (An LKM developer's tool for Linux Deepin 12.04)
3 | //
4 | // Building and Running Modules
5 | // This utility compiles the kernel-modules whose source-files
6 | // reside in the current directory (then cleans up afterward).
7 | //
8 | // programmer: Tsuibin
9 | // email: xubin@linuxdeepin.com
10 | // written on: 1 JAN 2012
11 | //-------------------------------------------------------------------
12 |
13 | package main
14 |
15 | import (
16 | "bufio"
17 | "bytes"
18 | "fmt"
19 | "os"
20 | "os/exec"
21 | "strings"
22 | )
23 |
24 | func main() {
25 |
26 | file, err := os.Create("Makefile")
27 |
28 | if err != nil {
29 | fmt.Println("Create Makefile error")
30 | os.Exit(1)
31 |
32 | }
33 |
34 | makeFile := bufio.NewWriter(file)
35 | makeFile.WriteString("\nifneq\t($(KERNELRELEASE),)")
36 | makeFile.WriteString("\nobj-m\t:= ")
37 |
38 | var filename string
39 | for i := 1; i < len(os.Args); i++ {
40 |
41 | filename = os.Args[i]
42 | filename = strings.Replace(filename, ".c", ".o ", 1)
43 | makeFile.WriteString(filename)
44 | }
45 |
46 | if len(os.Args) == 1 {
47 | dir, _ := os.Open(".")
48 | files, _ := dir.Readdir(0)
49 | for _, f := range files {
50 | if !f.IsDir() {
51 | filename = f.Name()
52 | if strings.Contains(filename, ".c") {
53 | filename = strings.Replace(filename, ".c", ".o ", 1)
54 | makeFile.WriteString(filename)
55 | }
56 | }
57 | }
58 | }
59 |
60 | makeFile.WriteString("\n")
61 | makeFile.WriteString("\nelse")
62 | makeFile.WriteString("\nKDIR\t:= /lib/modules/$(shell uname -r)/build")
63 | makeFile.WriteString("\nPWD\t:= $(shell pwd)")
64 | makeFile.WriteString("\n")
65 | makeFile.WriteString("default:\t")
66 | makeFile.WriteString("\n\t$(MAKE) -C $(KDIR) SUBDIRS=$(PWD) modules ")
67 | makeFile.WriteString("\n\trm -r -f .tmp_versions *.mod.c .*.cmd *.o *~ *.order ")
68 | makeFile.WriteString("Modules.symvers ")
69 | makeFile.WriteString("*.symvers ")
70 | makeFile.WriteString("\n")
71 | makeFile.WriteString("clean:\t")
72 | makeFile.WriteString("\n\trm -r -f *.ko mmake *.order ")
73 | makeFile.WriteString("\n")
74 | makeFile.WriteString("\nendif")
75 | makeFile.WriteString("\n\n")
76 | makeFile.Flush()
77 |
78 | cmd := exec.Command("/usr/bin/make")
79 | cmd.Stdin = strings.NewReader("some input")
80 | var out bytes.Buffer
81 | cmd.Stdout = &out
82 |
83 | if err := cmd.Run(); err != nil {
84 | fmt.Println(err.Error())
85 | }
86 |
87 | fmt.Printf(out.String())
88 |
89 | }
90 |
--------------------------------------------------------------------------------
/src/mmake.cpp:
--------------------------------------------------------------------------------
1 | //-------------------------------------------------------------------
2 | // mmake.cpp (An LKM developer's tool for Linux 2.6)
3 | //
4 | // This utility compiles the kernel-modules whose source-files
5 | // reside in the current directory (then cleans up afterward).
6 | //
7 | // Adapted from: "Building and Running Modules" (Chapter Two),
8 | // in: "Linux Device Drivers (3rd Ed)," by Rubini and Corbett.
9 | //
10 | // programmer: ALLAN CRUSE
11 | // written on: 22 JAN 2005
12 | // revised on: 19 MAR 2005 -- command-line arguments override
13 | // revised on: 27 JUL 2006 -- extra cleanup for kernel 2.6.17
14 | // revised on: 31 MAY 2007 -- adjust extra cleanup for 2.6.18
15 | //-------------------------------------------------------------------
16 | #include // for fopen(), fprintf(), fclose(), perror()
17 | #include // for opendir(), readdir()
18 | #include // for strchr(), strncmp(), strncpy()
19 | #include // for exit()
20 | int main( int argc, char **argv )
21 | {
22 | DIR *dp = opendir( "." ); // open the current directory
23 | if ( dp == NULL ) { perror( "opendir" ); exit(1); }
24 | FILE *fp = fopen( "Makefile", "w" ); // create 'Makefile'
25 | if ( fp == NULL ) { perror( "Makefile" ); exit(1); }
26 | // write boilerplate statements to compile Linux 2.6 modules
27 | fprintf( fp, "\nifneq\t($(KERNELRELEASE),)" );
28 | fprintf( fp, "\nobj-m\t:= " );
29 | // form the list of ".o" files from command-line arguments
30 | char filename[ NAME_MAX ];
31 | for (int i = 1; i < argc; i++)
32 | {
33 | strncpy( filename, argv[i], NAME_MAX );
34 | char *suffixp = strchr( filename, '.' );
35 | if (( suffixp == NULL )&&( strlen(filename) < NAME_MAX-3 ))
36 | strncat( filename, ".o", 3 );
37 | suffixp = strchr( filename, '.' );
38 | if ( strncmp( suffixp, ".o", 3 ) != 0 )
39 | strncpy( suffixp, ".o", 3 );
40 | fprintf( fp, "%s ", filename );
41 | }
42 | // or form the list of ".o" files from current ".c" files
43 | struct dirent *entry;
44 | if ( argc == 1 ) while ( entry = readdir( dp ) )
45 | {
46 | strncpy( filename, entry->d_name, NAME_MAX );
47 | char *suffixp = strchr( filename, '.' );
48 | if ( suffixp == NULL ) continue;
49 | if ( strncmp( suffixp, ".c", 3 ) != 0 ) continue;
50 | strncpy( suffixp, ".o", 3 );
51 | fprintf( fp, "%s ", filename );
52 | }
53 | // generate the remainder of the 'Makefile' boilerplate
54 | fprintf( fp, "\n" );
55 | fprintf( fp, "\nelse" );
56 | fprintf( fp, "\nKDIR\t:= /lib/modules/$(shell uname -r)/build" );
57 | fprintf( fp, "\nPWD\t:= $(shell pwd)" );
58 | fprintf( fp, "\n" );
59 | fprintf( fp, "default:\t" );
60 | fprintf( fp, "\n\t$(MAKE) -C $(KDIR) SUBDIRS=$(PWD) modules ");
61 | fprintf (fp, "\n\trm -r -f .tmp_versions *.mod.c .*.cmd *.o *~ ");
62 | //fprintf( fp, "Modules.symvers " ); // <-- added 7/27/2006
63 | fprintf (fp, "*.symvers "); // <-- added 5/31/2007
64 | fprintf (fp, "\n");
65 | fprintf (fp, "clean:\t");
66 | fprintf (fp, "\n\trm -r -f *.ko mmake *.order ");
67 | fprintf (fp, "\n");
68 | fprintf( fp, "\nendif" );
69 | fprintf( fp, "\n\n" );
70 | fclose( fp );
71 | // execute the 'make' utility using our just-created 'Makefile'
72 | system(" make ");
73 | }
74 |
--------------------------------------------------------------------------------