Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#151 Le 10/11/2009, à 01:40

motard13500

Re : EEEPC overclocking avec PROCEEE...

Oui, je suis de Martigues, pour le script je me suis pas pris la tête j'ai fait un script de monté, un de décente (au cas ou) et un de notification
montée

#!/bin/bash

#Ventilateur en mode manuel - Fan manual
sudo sh -c 'echo 1 > /proc/eee/fan_manual'
#Paramétrage du ventilateur a 100 par pas de 10 - Setting the fan to 100 by +10 step
sudo sh -c 'echo 10 > /proc/eee/fan_speed'
sudo sh -c 'echo 20 > /proc/eee/fan_speed'
sudo sh -c 'echo 30 > /proc/eee/fan_speed'
sudo sh -c 'echo 40 > /proc/eee/fan_speed'
sudo sh -c 'echo 50 > /proc/eee/fan_speed'
sudo sh -c 'echo 60 > /proc/eee/fan_speed'
sudo sh -c 'echo 70 > /proc/eee/fan_speed'
sudo sh -c 'echo 80 > /proc/eee/fan_speed'
sudo sh -c 'echo 90 > /proc/eee/fan_speed'
sudo sh -c 'echo 100 > /proc/eee/fan_speed'
#Paramétrage du fsb par pas de +1MHz - Setting up the fsb by +1MHz step
sudo sh -c 'echo 71 24 1 > /proc/eee/fsb'
sudo sh -c 'echo 72 24 1 > /proc/eee/fsb'
sudo sh -c 'echo 73 24 1 > /proc/eee/fsb'
sudo sh -c 'echo 74 24 1 > /proc/eee/fsb'
sudo sh -c 'echo 75 24 1 > /proc/eee/fsb'
sudo sh -c 'echo 76 24 1 > /proc/eee/fsb'
sudo sh -c 'echo 77 24 1 > /proc/eee/fsb'
sudo sh -c 'echo 78 24 1 > /proc/eee/fsb'
sudo sh -c 'echo 79 24 1 > /proc/eee/fsb'
sudo sh -c 'echo 80 24 1 > /proc/eee/fsb'
sudo sh -c 'echo 81 24 1 > /proc/eee/fsb'
sudo sh -c 'echo 82 24 1 > /proc/eee/fsb'
sudo sh -c 'echo 83 24 1 > /proc/eee/fsb'
sudo sh -c 'echo 84 24 1 > /proc/eee/fsb'
sudo sh -c 'echo 85 24 1 > /proc/eee/fsb'
sudo sh -c 'echo 86 24 1 > /proc/eee/fsb'
sudo sh -c 'echo 87 24 1 > /proc/eee/fsb'
sudo sh -c 'echo 88 24 1 > /proc/eee/fsb'
sudo sh -c 'echo 89 24 1 > /proc/eee/fsb'
sudo sh -c 'echo 90 24 1 > /proc/eee/fsb'
sudo sh -c 'echo 91 24 1 > /proc/eee/fsb'
sudo sh -c 'echo 92 24 1 > /proc/eee/fsb'
sudo sh -c 'echo 93 24 1 > /proc/eee/fsb'
sudo sh -c 'echo 94 24 1 > /proc/eee/fsb'
sudo sh -c 'echo 95 24 1 > /proc/eee/fsb'
sudo sh -c 'echo 96 24 1 > /proc/eee/fsb'
sudo sh -c 'echo 97 24 1 > /proc/eee/fsb'
sudo sh -c 'echo 98 24 1 > /proc/eee/fsb'
sudo sh -c 'echo 99 24 1 > /proc/eee/fsb'
sudo sh -c 'echo 100 24 1 > /proc/eee/fsb'
sudo sh -c 'echo 101 24 1 > /proc/eee/fsb'
sudo sh -c 'echo 102 24 1 > /proc/eee/fsb'
sudo sh -c 'echo 103 24 1 > /proc/eee/fsb'
sudo sh -c 'echo 104 24 1 > /proc/eee/fsb'
sudo sh -c 'echo 105 24 1 > /proc/eee/fsb'
sudo sh -c 'echo 106 25 1 > /proc/eee/fsb'
sudo sh -c 'echo 107 26 1 > /proc/eee/fsb'
sudo sh -c 'echo 108 27 1 > /proc/eee/fsb'
sudo sh -c 'echo 109 28 1 > /proc/eee/fsb'
sudo sh -c 'echo 110 29 1 > /proc/eee/fsb'
sudo sh -c 'echo 111 30 1 > /proc/eee/fsb'
sudo sh -c 'echo 112 30 1 > /proc/eee/fsb'
sudo sh -c 'echo 113 30 1 > /proc/eee/fsb'
sudo sh -c 'echo 114 30 1 > /proc/eee/fsb'
sudo sh -c 'echo 115 30 1 > /proc/eee/fsb'
echo "overclocker"

exit

décente

#!/bin/bash

#Paramétrage du fsb par pas de -1MHz - Setting up the fsb by -1MHz step
sudo sh -c 'echo 114 30 1 > /proc/eee/fsb'
sudo sh -c 'echo 113 30 1 > /proc/eee/fsb'
sudo sh -c 'echo 112 30 1 > /proc/eee/fsb'
sudo sh -c 'echo 111 30 1 > /proc/eee/fsb'
sudo sh -c 'echo 110 29 1 > /proc/eee/fsb'
sudo sh -c 'echo 109 28 1 > /proc/eee/fsb'
sudo sh -c 'echo 108 27 1 > /proc/eee/fsb'
sudo sh -c 'echo 107 26 1 > /proc/eee/fsb'
sudo sh -c 'echo 106 25 1 > /proc/eee/fsb'
sudo sh -c 'echo 105 24 1 > /proc/eee/fsb'
sudo sh -c 'echo 104 24 1 > /proc/eee/fsb'
sudo sh -c 'echo 103 24 1 > /proc/eee/fsb'
sudo sh -c 'echo 102 24 1 > /proc/eee/fsb'
sudo sh -c 'echo 101 24 1 > /proc/eee/fsb'
sudo sh -c 'echo 100 24 1 > /proc/eee/fsb'
sudo sh -c 'echo 99 24 1 > /proc/eee/fsb'
sudo sh -c 'echo 98 24 1 > /proc/eee/fsb'
sudo sh -c 'echo 97 24 1 > /proc/eee/fsb'
sudo sh -c 'echo 96 24 1 > /proc/eee/fsb'
sudo sh -c 'echo 95 24 1 > /proc/eee/fsb'
sudo sh -c 'echo 94 24 1 > /proc/eee/fsb'
sudo sh -c 'echo 93 24 1 > /proc/eee/fsb'
sudo sh -c 'echo 92 24 1 > /proc/eee/fsb'
sudo sh -c 'echo 91 24 1 > /proc/eee/fsb'
sudo sh -c 'echo 90 24 1 > /proc/eee/fsb'
sudo sh -c 'echo 89 24 1 > /proc/eee/fsb'
sudo sh -c 'echo 88 24 1 > /proc/eee/fsb'
sudo sh -c 'echo 87 24 1 > /proc/eee/fsb'
sudo sh -c 'echo 86 24 1 > /proc/eee/fsb'
sudo sh -c 'echo 85 24 1 > /proc/eee/fsb'
sudo sh -c 'echo 84 24 1 > /proc/eee/fsb'
sudo sh -c 'echo 83 24 1 > /proc/eee/fsb'
sudo sh -c 'echo 82 24 1 > /proc/eee/fsb'
sudo sh -c 'echo 81 24 1 > /proc/eee/fsb'
sudo sh -c 'echo 80 24 1 > /proc/eee/fsb'
sudo sh -c 'echo 79 24 1 > /proc/eee/fsb'
sudo sh -c 'echo 78 24 1 > /proc/eee/fsb'
sudo sh -c 'echo 77 24 1 > /proc/eee/fsb'
sudo sh -c 'echo 76 24 1 > /proc/eee/fsb'
sudo sh -c 'echo 75 24 1 > /proc/eee/fsb'
sudo sh -c 'echo 74 24 1 > /proc/eee/fsb'
sudo sh -c 'echo 73 24 1 > /proc/eee/fsb'
sudo sh -c 'echo 72 24 1 > /proc/eee/fsb'
sudo sh -c 'echo 71 24 1 > /proc/eee/fsb'
sudo sh -c 'echo 70 24 0 > /proc/eee/fsb'
#Paramétrage du ventilateur a 0 par pas de 10 - Setting the fan to 0 by -10 step
sudo sh -c 'echo 90 > /proc/eee/fan_speed'
sudo sh -c 'echo 80 > /proc/eee/fan_speed'
sudo sh -c 'echo 70 > /proc/eee/fan_speed'
sudo sh -c 'echo 60 > /proc/eee/fan_speed'
sudo sh -c 'echo 50 > /proc/eee/fan_speed'
sudo sh -c 'echo 40 > /proc/eee/fan_speed'
#Ventilateur en mode automatique - Automatic fan mode
sudo sh -c 'echo 0 > /proc/eee/fan_manual'
echo "Origine"

exit

et voila mon script de notification il faut instaler le paquet libnotify-bin et mètre l'icône dans votre home "~/.NotifyEee.png"
ICI
captur11.png

Dernière modification par motard13500 (Le 10/11/2009, à 02:22)


EeePC 701 4G White 1035 MHz Ubuntu 9.04

Hors ligne

#152 Le 10/11/2009, à 09:33

fredr

Re : EEEPC overclocking avec PROCEEE...

Bonjour à tous,

J'ai réussi à recompiler eee.ko avec un noyau 2.6.31:

Comme précédement remplacer les &proc_root par NULL
Commenter les lignes 404 et 421.

Le code modifié:

/*
 *  eee.c - Asus eeePC extras
 *
 *  Copyright (C) 2007 Andrew Tipton
 *
 *  This program is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License as published by
 *  the Free Software Foundation; either version 2 of the License, or
 *  (at your option) any later version.
 *
 *  Ths program is distributed in the hope that it will be useful,
 *  but WITOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTAILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with this program; if not, write to the Free Software
 *  Foundation, Inc., 59 Template Place, Suite 330, Boston, MA  02111-1307 USA
 *  
 *  ---------
 *
 *  WARNING:  This is an extremely *experimental* module!  This code has been
 *  developed through trial-and-error, which means I don't really understand
 *  100% what's going on here...  That means there's a chance that there could
 *  be unintended side-effects which might cause data loss or even physical
 *  damage!
 *
 *  Again, this code comes WITHOUT ANY WARRANTY whatsoever.
 */

#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/proc_fs.h>
#include <asm/uaccess.h>
#include <asm/io.h>             // For inb() and outb()
#include <linux/i2c.h>
#include <linux/mutex.h>


/* Module info */
MODULE_LICENSE("GPL");
MODULE_AUTHOR("Andrew Tipton");
MODULE_DESCRIPTION("Support for eeePC-specific functionality.");
#define EEE_VERSION "0.2"


/* PLL access functions.
 *
 * Note that this isn't really the "proper" way to use the I2C API... :)
 * I2C_SMBUS_BLOCK_MAX is 32, the maximum size of a block read/write.
 */
static void eee_pll_init(void);
static void eee_pll_read(void);
static void eee_pll_write(void);
static void eee_pll_cleanup(void);


static struct i2c_client eee_pll_smbus_client = {
    .adapter = NULL,
    .addr = 0x69,
    .flags = 0,
};
static char eee_pll_data[I2C_SMBUS_BLOCK_MAX];
static int eee_pll_datalen = 0;

static void eee_pll_init(void) {
    eee_pll_smbus_client.adapter = i2c_get_adapter(0);

    // Fill the eee_pll_data buffer.
    eee_pll_read();
}

// Takes approx 150ms to execute.
static void eee_pll_read(void) {
    memset(eee_pll_data, 0, I2C_SMBUS_BLOCK_MAX);
    eee_pll_datalen = i2c_smbus_read_block_data(&eee_pll_smbus_client, 0, eee_pll_data);
}

// Takes approx 150ms to execute ???
static void eee_pll_write(void) {
    i2c_smbus_write_block_data(&eee_pll_smbus_client, 0, eee_pll_datalen, eee_pll_data);
}

static void eee_pll_cleanup(void) {
    i2c_put_adapter(eee_pll_smbus_client.adapter);
}

/* Embedded controller access functions.
 *
 * The ENE KB3310 embedded controller has a feature known as "Index IO"
 * which allows the entire 64KB address space of the controller to be
 * accessed via a set of ISA I/O ports at 0x380-0x384.  This allows us
 * direct access to all of the controller's ROM, RAM, SFRs, and peripheral
 * registers;  this access bypasses the EC firmware entirely.
 *
 * This is much faster than using ec_transaction(), and it also allows us to
 * do things which are not possible through the EC's official interface.
 *
 * An Indexed IO write to an EC register takes approx. 90us, while an EC
 * transaction takes approx. 2500ms.
 */
#define EC_IDX_ADDRH 0x381
#define EC_IDX_ADDRL 0x382
#define EC_IDX_DATA 0x383
#define HIGH_BYTE(x) ((x & 0xff00) >> 8)
#define LOW_BYTE(x) (x & 0x00ff)
static DEFINE_MUTEX(eee_ec_mutex);

static unsigned char eee_ec_read(unsigned short addr) {
    unsigned char data;

    mutex_lock(&eee_ec_mutex);
    outb(HIGH_BYTE(addr), EC_IDX_ADDRH);
    outb(LOW_BYTE(addr), EC_IDX_ADDRL);
    data = inb(EC_IDX_DATA);
    mutex_unlock(&eee_ec_mutex);

    return data;
}

static void eee_ec_write(unsigned short addr, unsigned char data) {
    mutex_lock(&eee_ec_mutex);
    outb(HIGH_BYTE(addr), EC_IDX_ADDRH);
    outb(LOW_BYTE(addr), EC_IDX_ADDRL);
    outb(data, EC_IDX_DATA);
    mutex_unlock(&eee_ec_mutex);
}

static void eee_ec_gpio_set(int pin, int value) {
    unsigned short port;
    unsigned char mask;

    port = 0xFC20 + ((pin >> 3) & 0x1f);
    mask = 1 << (pin & 0x07);
    if (value) {
        eee_ec_write(port, eee_ec_read(port) | mask);
    } else {
        eee_ec_write(port, eee_ec_read(port) & ~mask);
    }
}

static int eee_ec_gpio_get(int pin) {
    unsigned short port;
    unsigned char mask;
    unsigned char status;

    port = 0xfc20 + ((pin >> 3) & 0x1f);
    mask = 1 << (pin & 0x07);
    status = eee_ec_read(port) & mask;

    return (status) ? 1 : 0;
}

/*** Fan and temperature functions ***/
#define EC_ST00 0xF451          // Temperature of CPU (C)
#define EC_SC02 0xF463          // Fan PWM duty cycle (%)
#define EC_SC05 0xF466          // High byte of fan speed (RPM)
#define EC_SC06 0xF467          // Low byte of fan speed (RPM)
#define EC_SFB3 0xF4D3          // Flag byte containing SF25 (FANctrl)

static unsigned int eee_get_temperature(void) {
    return eee_ec_read(EC_ST00);
}

static unsigned int eee_fan_get_rpm(void) {
    return (eee_ec_read(EC_SC05) << 8) | eee_ec_read(EC_SC06);
}

// 1 if fan is in manual mode, 0 if controlled by the EC
static int eee_fan_get_manual(void) {
    return (eee_ec_read(EC_SFB3) & 0x02) ? 1 : 0;
}

static void eee_fan_set_manual(int manual) {
    if (manual) {
        // SF25=1: Prevent the EC from controlling the fan.
        eee_ec_write(EC_SFB3, eee_ec_read(EC_SFB3) | 0x02);
    } else {
        // SF25=0: Allow the EC to control the fan.
        eee_ec_write(EC_SFB3, eee_ec_read(EC_SFB3) & ~0x02);
    }
}

static void eee_fan_set_speed(unsigned int speed) {
    eee_ec_write(EC_SC02, (speed > 100) ? 100 : speed);
}

static unsigned int eee_fan_get_speed(void) {
    return eee_ec_read(EC_SC02);
}


/*** Voltage functions ***/
#define EC_VOLTAGE_PIN 0x66
enum eee_voltage { Low=0, High=1 };
static enum eee_voltage eee_get_voltage(void) {
    return eee_ec_gpio_get(EC_VOLTAGE_PIN);
}
static void eee_set_voltage(enum eee_voltage voltage) {
    eee_ec_gpio_set(EC_VOLTAGE_PIN, voltage);
}

/*** FSB functions ***/
static void eee_get_freq(int *n, int *m) {
    *m = eee_pll_data[11] & 0x3F;
    *n = eee_pll_data[12];
}

static void eee_set_freq(int n, int m) {
    int current_n = 0, current_m = 0;
    eee_get_freq(&current_n, &current_m);
    if (current_n != n || current_m != m) {
        eee_pll_data[11] = m & 0x3F;
        eee_pll_data[12] = n & 0xFF;
        eee_pll_write();
    }
}

/*** /proc file functions ***/

static struct proc_dir_entry *eee_proc_rootdir;
#define EEE_PROC_READFUNC(NAME) \
    void eee_proc_readfunc_##NAME (char *buf, int buflen, int *bufpos)
#define EEE_PROC_WRITEFUNC(NAME) \
    void eee_proc_writefunc_##NAME (const char *buf, int buflen, int *bufpos)
#define EEE_PROC_PRINTF(FMT, ARGS...) \
    *bufpos += snprintf(buf + *bufpos, buflen - *bufpos, FMT, ##ARGS)
#define EEE_PROC_SCANF(COUNT, FMT, ARGS...) \
    do { \
        int len = 0; \
        int cnt = sscanf(buf + *bufpos, FMT "%n", ##ARGS, &len); \
        if (cnt < COUNT) { \
            printk(KERN_DEBUG "eee:  scanf(\"%s\") wanted %d args, but got %d.\n", FMT, COUNT, cnt); \
            return; \
        } \
        *bufpos += len; \
    } while (0)
#define EEE_PROC_MEMCPY(SRC, SRCLEN) \
    do { \
        int len = SRCLEN; \
        if (len > (buflen - *bufpos)) \
            len = buflen - *bufpos; \
        memcpy(buf + *bufpos, SRC, (SRCLEN > (buflen - *bufpos)) ? (buflen - *bufpos) : SRCLEN); \
        *bufpos += len; \
    } while (0)
#define EEE_PROC_FILES_BEGIN \
    static struct eee_proc_file eee_proc_files[] = {
#define EEE_PROC_RW(NAME, MODE) \
    { #NAME, MODE, &eee_proc_readfunc_##NAME, &eee_proc_writefunc_##NAME }
#define EEE_PROC_RO(NAME, MODE) \
    { #NAME, MODE, &eee_proc_readfunc_##NAME, NULL }
#define EEE_PROC_FILES_END \
    { NULL, 0, NULL, NULL } };

struct eee_proc_file {
    char *name;
    int mode;
    void (*readfunc)(char *buf, int buflen, int *bufpos);
    void (*writefunc)(const char *buf, int buflen, int *bufpos);
};


EEE_PROC_READFUNC(fsb) {
    int n = 0;
    int m = 0;
    int voltage = 0;
    eee_get_freq(&n, &m);
    voltage = (int)eee_get_voltage();
    EEE_PROC_PRINTF("%d %d %d\n", n, m, voltage);
}

EEE_PROC_WRITEFUNC(fsb) {
    int n = 70;     // sensible defaults
    int m = 24;
    int voltage = 0;
    EEE_PROC_SCANF(3, "%i %i %i", &n, &m, &voltage);
    eee_set_freq(n, m);
    eee_set_voltage(voltage);
}

EEE_PROC_READFUNC(pll) {
    eee_pll_read();
    EEE_PROC_MEMCPY(eee_pll_data, eee_pll_datalen);
}

EEE_PROC_READFUNC(fan_speed) {
    int speed = eee_fan_get_speed();
    EEE_PROC_PRINTF("%d\n", speed);
}

EEE_PROC_WRITEFUNC(fan_speed) {
    unsigned int speed = 0;
    EEE_PROC_SCANF(1, "%u", &speed);
    eee_fan_set_speed(speed);
}

EEE_PROC_READFUNC(fan_rpm) {
    int rpm = eee_fan_get_rpm();
    EEE_PROC_PRINTF("%d\n", rpm);
}

EEE_PROC_READFUNC(fan_manual) {
    EEE_PROC_PRINTF("%d\n", eee_fan_get_manual());
}

EEE_PROC_WRITEFUNC(fan_manual) {
    int manual = 0;
    EEE_PROC_SCANF(1, "%i", &manual);
    eee_fan_set_manual(manual);
}

#if 0
EEE_PROC_READFUNC(fan_mode) {
    enum eee_fan_mode mode = eee_fan_get_mode();
    switch (mode) {
        case Manual:    EEE_PROC_PRINTF("manual\n");
                        break;
        case Automatic: EEE_PROC_PRINTF("auto\n");
                        break;
        case Embedded:  EEE_PROC_PRINTF("embedded\n");
                        break;
    }
}

EEE_PROC_WRITEFUNC(fan_mode) {
    enum eee_fan_mode mode = Automatic;
    char inputstr[16];
    EEE_PROC_SCANF(1, "%15s", inputstr);
    if (strcmp(inputstr, "manual") == 0) {
        mode = Manual;
    } else if (strcmp(inputstr, "auto") == 0) {
        mode = Automatic;
    } else if (strcmp(inputstr, "embedded") == 0) {
        mode = Embedded;
    }
    eee_fan_set_mode(mode);
}
#endif

EEE_PROC_READFUNC(temperature) {
    unsigned int t = eee_get_temperature();
    EEE_PROC_PRINTF("%d\n", t);
}

EEE_PROC_FILES_BEGIN
    EEE_PROC_RW(fsb,            0644),
    EEE_PROC_RO(pll,            0400),
    EEE_PROC_RW(fan_speed,      0644),
    EEE_PROC_RO(fan_rpm,        0444),
    EEE_PROC_RW(fan_manual,     0644),
    EEE_PROC_RO(temperature,    0444),
EEE_PROC_FILES_END
    

int eee_proc_readfunc(char *buffer, char **buffer_location, off_t offset,
                      int buffer_length, int *eof, void *data)
{
    struct eee_proc_file *procfile = (struct eee_proc_file *)data;
    int bufpos = 0;

    if (!procfile || !procfile->readfunc) {
        return -EIO;
    }

    *eof = 1;
    if (offset > 0) {
        return 0;
    }

    (*procfile->readfunc)(buffer, buffer_length, &bufpos);
    return bufpos;
}

int eee_proc_writefunc(struct file *file, const char *buffer,
                       unsigned long count, void *data)
{
    char userdata[129];
    int bufpos = 0;
    struct eee_proc_file *procfile = (struct eee_proc_file *)data;

    if (!procfile || !procfile->writefunc) {
        return -EIO;
    }

    if (copy_from_user(userdata, buffer, (count > 128) ? 128 : count)) {
        printk(KERN_DEBUG "eee: copy_from_user() failed\n");
        return -EIO;
    }
    userdata[128] = 0;      // So that sscanf() doesn't overflow...

    (*procfile->writefunc)(userdata, count, &bufpos);
    return count;
}

int eee_proc_init(void) {
    int i;

    /* Create the /proc/eee directory. */
    eee_proc_rootdir = proc_mkdir("eee", NULL);
    if (!eee_proc_rootdir) {
        printk(KERN_ERR "eee: Unable to create /proc/eee\n");
        return false;
    }
    //eee_proc_rootdir->owner = THIS_MODULE;

    /* Create the individual proc files. */
    for (i=0; eee_proc_files[i].name; i++) {
        struct proc_dir_entry *proc_file;
        struct eee_proc_file *f = &eee_proc_files[i];

        proc_file = create_proc_entry(f->name, f->mode, eee_proc_rootdir);
        if (!proc_file) {
            printk(KERN_ERR "eee: Unable to create /proc/eee/%s", f->name);
            goto proc_init_cleanup;
        }
        proc_file->read_proc = &eee_proc_readfunc;
        if (f->writefunc) {
            proc_file->write_proc = &eee_proc_writefunc;
        }
        proc_file->data = f;
        /*proc_file->owner = THIS_MODULE;*/
        proc_file->mode = S_IFREG | f->mode;
        proc_file->uid = 0;
        proc_file->gid = 0;
    }
    return true;

    /* We had an error, so cleanup all of the proc files... */
proc_init_cleanup:
    for (; i >= 0; i--) {
        remove_proc_entry(eee_proc_files[i].name, eee_proc_rootdir);
    }
    remove_proc_entry("eee", NULL);
    return false;
}

void eee_proc_cleanup(void) {
    int i;
    for (i = 0; eee_proc_files[i].name; i++) {
        remove_proc_entry(eee_proc_files[i].name, eee_proc_rootdir);
    }
    remove_proc_entry("eee", NULL);
}



/*** Module initialization ***/

int init_module(void) {
    eee_pll_init();
    eee_proc_init();
    printk(KERN_NOTICE "Asus eeePC extras, version %s\n", EEE_VERSION);
    return 0;
}

void cleanup_module(void) {
    eee_pll_cleanup();
    eee_proc_cleanup();
}

Je vais tester faites moi par des retours.

Fred

Edit: pour le ventilateurs, cela fonctionne sans problème mais pour le processeur je ne vois pas de variations entre 630 et 900. Peut-être est ce du à ce driver intel tout p****i

Fred

Dernière modification par fredr (Le 10/11/2009, à 09:56)


ArcoLinuxD Awesome
L'optimiste pense que nous vivons dans le meilleur des mondes. Et le pessimiste craint que ce ne soit exact.

Hors ligne

#153 Le 10/11/2009, à 10:08

motard13500

Re : EEEPC overclocking avec PROCEEE...

Essay de lancer mon scripte de monter (1035 MHz, ventilo a 100%, ...)
Si il y a une différence avec 630 MHz tu devrai la voir


EeePC 701 4G White 1035 MHz Ubuntu 9.04

Hors ligne

#154 Le 10/11/2009, à 11:48

fredr

Re : EEEPC overclocking avec PROCEEE...

Non, aucune différence de perf entre 630 et 900... Le fsb ne semble pas fonctionner.

Pour régler le ventilo OK.

Fred


ArcoLinuxD Awesome
L'optimiste pense que nous vivons dans le meilleur des mondes. Et le pessimiste craint que ce ne soit exact.

Hors ligne

#155 Le 10/11/2009, à 13:32

motard13500

Re : EEEPC overclocking avec PROCEEE...

Ben les 701 son condamné a rester sur la 9.04 sad dommage


EeePC 701 4G White 1035 MHz Ubuntu 9.04

Hors ligne

#156 Le 17/11/2009, à 11:04

fiasko

Re : EEEPC overclocking avec PROCEEE...

bonjour,
J'ai laché ma vieille 7.04 que j'avais installé sur mon 701.J'ai craqué pour eeebuntu 3(9.04)

J'ai téléchargé le eeepc-linux-2 pour 9.04,mais quand je veux compiler avec make :
/lib/modules/2.6.28-11-generic/build: No such file or directory

Effectivement le repertoire build n'existe pas...une idée?

Merci


gutsy et win lsd / asus A8SC
sudo apt-get remove billou

Hors ligne

#157 Le 17/11/2009, à 15:32

fredr

Re : EEEPC overclocking avec PROCEEE...

Tu n'as sans doute pas installé le paquet linux-header

Fred


ArcoLinuxD Awesome
L'optimiste pense que nous vivons dans le meilleur des mondes. Et le pessimiste craint que ce ne soit exact.

Hors ligne

#158 Le 18/11/2009, à 13:25

fiasko

Re : EEEPC overclocking avec PROCEEE...

salut fredr,

exact qué beta!! j'avais pas installé le headers generic!!
merci

Effectivement à 990 mhz j'arrive à environ 300fps avec glxgears alors qu'avant j'obtenais 700..

Depuis quand est apparu ce probleme de drivers?(quelle version)

Il ya une manip pour revenir au drivers intel,tu l'as testé?

Dernière modification par fiasko (Le 18/11/2009, à 13:44)


gutsy et win lsd / asus A8SC
sudo apt-get remove billou

Hors ligne

#159 Le 19/11/2009, à 17:07

fredr

Re : EEEPC overclocking avec PROCEEE...

Salut,

Je n'ai pas réussis  à revenir en arrière pour les drivers.

Je pense que le soucis est apparu avec les noyaux 2.28 soit jaunty et karmic

Fred


ArcoLinuxD Awesome
L'optimiste pense que nous vivons dans le meilleur des mondes. Et le pessimiste craint que ce ne soit exact.

Hors ligne

#160 Le 02/12/2009, à 22:24

fiasko

Re : EEEPC overclocking avec PROCEEE...

Bonjour,

Je voudrais que mes "hotkeys" fonctionnent et notament  fn+f2 pour activer/couper le wifi.

Il semble que eee-control  soit la solution pour les eeepc.Par contre il semble qu'il y ai un soucis..conflit avec asus_eee alors que le module n'est pas chargé...la solution rmmod asus_eee donnée sur les forums ne fonctionne donc pas pour le 701. (je suis sous 9.04 et j'ai téléchargé le .deb de eee-control correspondant)

Peut on appliquer la méthode appliquée à l'époque pour la eeexubuntu 7.10 pour faire fonctionner les hotkeys?

Les autres options de eee-control m'importent peu et notament la var du FSB..et oui je tiens à utiliser mon vieux proceee pour la gloire!:)

merci de vos retours


gutsy et win lsd / asus A8SC
sudo apt-get remove billou

Hors ligne

#161 Le 30/03/2011, à 22:29

benton

Re : EEEPC overclocking avec PROCEEE...

bonjour

j'ai suivi les 2 tutos (page 1 et page 5)
mais j'ai cette erreur....
si qq1 à une idée


benton@benton:~/Bureau/eeepc-linux/module$ make
make -C /lib/modules/2.6.32-30-generic/build M=/home/benton/Bureau/eeepc-linux/module modules
make[1]: entrant dans le répertoire « /usr/src/linux-headers-2.6.32-30-generic »
  CC [M]  /home/benton/Bureau/eeepc-linux/module/eee.o
/home/benton/Bureau/eeepc-linux/module/eee.c: In function 'eee_proc_init':
/home/benton/Bureau/eeepc-linux/module/eee.c:404: error: 'struct proc_dir_entry' has no member named 'owner'
/home/benton/Bureau/eeepc-linux/module/eee.c:421: error: 'struct proc_dir_entry' has no member named 'owner'
make[2]: *** [/home/benton/Bureau/eeepc-linux/module/eee.o] Erreur 1
make[1]: *** [_module_/home/benton/Bureau/eeepc-linux/module] Erreur 2
make[1]: quittant le répertoire « /usr/src/linux-headers-2.6.32-30-generic »
make: *** [all] Erreur 2


MERCI

Hors ligne

#162 Le 01/06/2011, à 23:10

jax07

Re : EEEPC overclocking avec PROCEEE...

Salut,

Je suis sous Ubuntu 10.04 LTS sur mon EEE PC 701 4G et tout fonctionne après bien des déboires. Je peux faire un récap de ce qu'il faut faire pour aider ceux qui sont en rade.
Dans les prochains jours je vais essayé de remanier le script pour mes besoins.
je vous dirai ce qu'il en est.

@flasko : ton idée était porteuse et il n'existe toutjours rien d'équivalent ailleurs. Comme toi je continue avec proceee que j'utilise depuis ubuntu 8.04 LTS.


Tant qu'il y aura Windows, je jouerai le Magicien d'Oz...

Hors ligne

#163 Le 31/07/2011, à 00:08

PounkyM

Re : EEEPC overclocking avec PROCEEE...

Bonjour à tous,

Je rencontre une erreur lorsque je veux faire (pour eee.ko) :

wget http://eeepc-linux.googlecode.com/files/eeepc-linux-0.2.tar.gz
tar -xf eeepc-linux-0.2.tar.gz
cd eeepc-linux/module
make

L'erreur est à l'appel du make :

$ make
make -C /lib/modules/2.6.32-33-generic-pae/build M=/home/theo/eeepc-linux/module modules
make[1]: entrant dans le répertoire « /usr/src/linux-headers-2.6.32-33-generic-pae »
  CC [M]  /home/theo/eeepc-linux/module/eee.o
/home/theo/eeepc-linux/module/eee.c: In function ‘eee_proc_init’:
/home/theo/eeepc-linux/module/eee.c:399: error: ‘proc_root’ undeclared (first use in this function)
/home/theo/eeepc-linux/module/eee.c:399: error: (Each undeclared identifier is reported only once
/home/theo/eeepc-linux/module/eee.c:399: error: for each function it appears in.)
/home/theo/eeepc-linux/module/eee.c:404: error: ‘struct proc_dir_entry’ has no member named ‘owner’
/home/theo/eeepc-linux/module/eee.c:421: error: ‘struct proc_dir_entry’ has no member named ‘owner’
/home/theo/eeepc-linux/module/eee.c: In function ‘eee_proc_cleanup’:
/home/theo/eeepc-linux/module/eee.c:442: error: ‘proc_root’ undeclared (first use in this function)
make[2]: *** [/home/theo/eeepc-linux/module/eee.o] Erreur 1
make[1]: *** [_module_/home/theo/eeepc-linux/module] Erreur 2
make[1]: quittant le répertoire « /usr/src/linux-headers-2.6.32-33-generic-pae »
make: *** [all] Erreur 2
theo@theo-laptop:~/eeepc-linux/module$ ls
eee.c  Makefile
theo@theo-laptop:~/eeepc-linux/module$ sudo mv eee.ko /lib/modules/$(uname -r)/kernel/
mv: impossible d'évaluer «eee.ko»: Aucun fichier ou dossier de ce type

Que dois-je faire ?

Merci d'avance pour vos réponses !


"La liberté est un bagne aussi longtemps qu'un seul homme est asservi sur la terre"

Hors ligne

#164 Le 01/08/2011, à 15:27

PounkyM

Re : EEEPC overclocking avec PROCEEE...

Up ! smile


"La liberté est un bagne aussi longtemps qu'un seul homme est asservi sur la terre"

Hors ligne

#165 Le 08/08/2011, à 14:39

OliGoSia

Re : EEEPC overclocking avec PROCEEE...

Bonjour,
je compte sur votre aide car je n'arrive pas à overclocker mon eeepc701
J'ai veiller à scrupuleusement suivre les instructions et lorsque j'arrive à l'étape
$ sudo moprobe eee
j'obtiens
FATAL: Error inserting eee (/lib/modules/2.6.38-11-generic-pae/kernel/drivers/acpi/eee.ko): Invalid module format

je suppose un problème de Kernel

Je suis sur Lubuntu 11.04     kernel 2.6.38-11generic    Bios 1302 du 03/11/09

Merci pour votre aide

Hors ligne

#166 Le 10/08/2011, à 19:43

PounkyM

Re : EEEPC overclocking avec PROCEEE...

Idem...


"La liberté est un bagne aussi longtemps qu'un seul homme est asservi sur la terre"

Hors ligne

#167 Le 07/02/2012, à 17:30

jax07

Re : EEEPC overclocking avec PROCEEE...

Bonjour à toutes et tous.

Pour répondre à ceux qui ont des problèmes avec la création du module, voici le fichier eee.c et son makefile associé. Ceux-ci fonctionnent parfaitement pour mon Eee PC 701 tournant sous Ubuntu 10.04 LTS (Lucid Lynx), noyau 2.6.32-38-generic.

eee.c modifié comme mentionné plus haut dans ce post pour la compatibilité avec les noyaux récents:

/*
 *  eee.c - Asus eeePC extras V0.1
 * 
 *  Copyright (C) 2007 Andrew Tipton
 *  Copyright (C) 2011 Jerome JAQUIN
 *
 *  This program is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License as published by
 *  the Free Software Foundation; either version 2 of the License, or
 *  (at your option) any later version.
 *
 *  Ths program is distributed in the hope that it will be useful,
 *  but WITOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTAILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with this program; if not, write to the Free Software
 *  Foundation, Inc., 59 Template Place, Suite 330, Boston, MA  02111-1307 USA
 *  
 *  ---------
 *
 *  WARNING:  This is an extremely *experimental* module!  This code has been
 *  developed through trial-and-error, which means I don't really understand
 *  100% what's going on here...  That means there's a chance that there could
 *  be unintended side-effects which might cause data loss or even physical
 *  damage!
 *
 *  Again, this code comes WITHOUT ANY WARRANTY whatsoever.
 */

#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/proc_fs.h>
#include <asm/uaccess.h>
#include <asm/io.h>             // For inb() and outb()
#include <linux/i2c.h>
#include <linux/mutex.h>


/* Module info */
MODULE_LICENSE("GPL");
MODULE_AUTHOR("Andrew Tipton");
MODULE_DESCRIPTION("Support for eeePC-specific functionality.");
#define EEE_VERSION "0.2"


/* PLL access functions.
 *
 * Note that this isn't really the "proper" way to use the I2C API... :)
 * I2C_SMBUS_BLOCK_MAX is 32, the maximum size of a block read/write.
 */
static int eee_pll_init(void);
static void eee_pll_read(void);
static void eee_pll_write(void);
static void eee_pll_cleanup(void);


static struct i2c_client eee_pll_smbus_client = {
    .adapter = NULL,
    .addr = 0x69,
    .flags = 0,
};
static char eee_pll_data[I2C_SMBUS_BLOCK_MAX];
static int eee_pll_datalen = 0;

static int eee_pll_init(void) {
    int i = 0;
    int found = 0;
    struct i2c_adapter * adapt;

    while ( (adapt = i2c_get_adapter(i)) != NULL) {
    printk("Found adapter %s\n", adapt->name);
    if (strstr(adapt->name, "I801")) { 
        found = 1;
        break;
    }    
    i++;
    }
    if ( found )    
        eee_pll_smbus_client.adapter = adapt;
    else {
        printk("No i801 adapter found. is i2c_i801 inserted ?\n"); 
        return -1;    
    }
    // Fill the eee_pll_data buffer.
    eee_pll_read();
    return 0;
}

// Takes approx 150ms to execute.
static void eee_pll_read(void) {
    memset(eee_pll_data, 0, I2C_SMBUS_BLOCK_MAX);
    eee_pll_datalen = i2c_smbus_read_block_data(&eee_pll_smbus_client, 0, eee_pll_data);
}

// Takes approx 150ms to execute ???
static void eee_pll_write(void) {
    i2c_smbus_write_block_data(&eee_pll_smbus_client, 0, eee_pll_datalen, eee_pll_data);
}

static void eee_pll_cleanup(void) {
    i2c_put_adapter(eee_pll_smbus_client.adapter);
}

/* Embedded controller access functions.
 *
 * The ENE KB3310 embedded controller has a feature known as "Index IO"
 * which allows the entire 64KB address space of the controller to be
 * accessed via a set of ISA I/O ports at 0x380-0x384.  This allows us
 * direct access to all of the controller's ROM, RAM, SFRs, and peripheral
 * registers;  this access bypasses the EC firmware entirely.
 *
 * This is much faster than using ec_transaction(), and it also allows us to
 * do things which are not possible through the EC's official interface.
 *
 * An Indexed IO write to an EC register takes approx. 90us, while an EC
 * transaction takes approx. 2500ms.
 */
#define EC_IDX_ADDRH 0x381
#define EC_IDX_ADDRL 0x382
#define EC_IDX_DATA 0x383
#define HIGH_BYTE(x) ((x & 0xff00) >> 8)
#define LOW_BYTE(x) (x & 0x00ff)
static DEFINE_MUTEX(eee_ec_mutex);

static unsigned char eee_ec_read(unsigned short addr) {
    unsigned char data;

    mutex_lock(&eee_ec_mutex);
    outb(HIGH_BYTE(addr), EC_IDX_ADDRH);
    outb(LOW_BYTE(addr), EC_IDX_ADDRL);
    data = inb(EC_IDX_DATA);
    mutex_unlock(&eee_ec_mutex);

    return data;
}

static void eee_ec_write(unsigned short addr, unsigned char data) {
    mutex_lock(&eee_ec_mutex);
    outb(HIGH_BYTE(addr), EC_IDX_ADDRH);
    outb(LOW_BYTE(addr), EC_IDX_ADDRL);
    outb(data, EC_IDX_DATA);
    mutex_unlock(&eee_ec_mutex);
}

static void eee_ec_gpio_set(int pin, int value) {
    unsigned short port;
    unsigned char mask;

    port = 0xFC20 + ((pin >> 3) & 0x1f);
    mask = 1 << (pin & 0x07);
    if (value) {
        eee_ec_write(port, eee_ec_read(port) | mask);
    } else {
        eee_ec_write(port, eee_ec_read(port) & ~mask);
    }
}

static int eee_ec_gpio_get(int pin) {
    unsigned short port;
    unsigned char mask;
    unsigned char status;

    port = 0xfc20 + ((pin >> 3) & 0x1f);
    mask = 1 << (pin & 0x07);
    status = eee_ec_read(port) & mask;

    return (status) ? 1 : 0;
}

/*** Fan and temperature functions ***/
#define EC_ST00 0xF451          // Temperature of CPU (C)
#define EC_SC02 0xF463          // Fan PWM duty cycle (%)
#define EC_SC05 0xF466          // High byte of fan speed (RPM)
#define EC_SC06 0xF467          // Low byte of fan speed (RPM)
#define EC_SFB3 0xF4D3          // Flag byte containing SF25 (FANctrl)

static unsigned int eee_get_temperature(void) {
    return eee_ec_read(EC_ST00);
}

static unsigned int eee_fan_get_rpm(void) {
    return (eee_ec_read(EC_SC05) << 8) | eee_ec_read(EC_SC06);
}

// 1 if fan is in manual mode, 0 if controlled by the EC
static int eee_fan_get_manual(void) {
    return (eee_ec_read(EC_SFB3) & 0x02) ? 1 : 0;
}

static void eee_fan_set_manual(int manual) {
    if (manual) {
        // SF25=1: Prevent the EC from controlling the fan.
        eee_ec_write(EC_SFB3, eee_ec_read(EC_SFB3) | 0x02);
    } else {
        // SF25=0: Allow the EC to control the fan.
        eee_ec_write(EC_SFB3, eee_ec_read(EC_SFB3) & ~0x02);
    }
}

static void eee_fan_set_speed(unsigned int speed) {
    eee_ec_write(EC_SC02, (speed > 100) ? 100 : speed);
}

static unsigned int eee_fan_get_speed(void) {
    return eee_ec_read(EC_SC02);
}


/*** Voltage functions ***/
#define EC_VOLTAGE_PIN 0x66
enum eee_voltage { Low=0, High=1 };
static enum eee_voltage eee_get_voltage(void) {
    return eee_ec_gpio_get(EC_VOLTAGE_PIN);
}
static void eee_set_voltage(enum eee_voltage voltage) {
    eee_ec_gpio_set(EC_VOLTAGE_PIN, voltage);
}

/*** FSB functions ***/
static void eee_get_freq(int *n, int *m) {
    *m = eee_pll_data[11] & 0x3F;
    *n = eee_pll_data[12];
}

static void eee_set_freq(int n, int m) {
    int current_n = 0, current_m = 0;
    eee_get_freq(&current_n, &current_m);
    if (current_n != n || current_m != m) {
        eee_pll_data[11] = m & 0x3F;
        eee_pll_data[12] = n & 0xFF;
        eee_pll_write();
    }
}

/*** /proc file functions ***/

static struct proc_dir_entry *eee_proc_rootdir;
#define EEE_PROC_READFUNC(NAME) \
    void eee_proc_readfunc_##NAME (char *buf, int buflen, int *bufpos)
#define EEE_PROC_WRITEFUNC(NAME) \
    void eee_proc_writefunc_##NAME (const char *buf, int buflen, int *bufpos)
#define EEE_PROC_PRINTF(FMT, ARGS...) \
    *bufpos += snprintf(buf + *bufpos, buflen - *bufpos, FMT, ##ARGS)
#define EEE_PROC_SCANF(COUNT, FMT, ARGS...) \
    do { \
        int len = 0; \
        int cnt = sscanf(buf + *bufpos, FMT "%n", ##ARGS, &len); \
        if (cnt < COUNT) { \
            printk(KERN_DEBUG "eee:  scanf(\"%s\") wanted %d args, but got %d.\n", FMT, COUNT, cnt); \
            return; \
        } \
        *bufpos += len; \
    } while (0)
#define EEE_PROC_MEMCPY(SRC, SRCLEN) \
    do { \
        int len = SRCLEN; \
        if (len > (buflen - *bufpos)) \
            len = buflen - *bufpos; \
        memcpy(buf + *bufpos, SRC, (SRCLEN > (buflen - *bufpos)) ? (buflen - *bufpos) : SRCLEN); \
        *bufpos += len; \
    } while (0)
#define EEE_PROC_FILES_BEGIN \
    static struct eee_proc_file eee_proc_files[] = {
#define EEE_PROC_RW(NAME, MODE) \
    { #NAME, MODE, &eee_proc_readfunc_##NAME, &eee_proc_writefunc_##NAME }
#define EEE_PROC_RO(NAME, MODE) \
    { #NAME, MODE, &eee_proc_readfunc_##NAME, NULL }
#define EEE_PROC_FILES_END \
    { NULL, 0, NULL, NULL } };

struct eee_proc_file {
    char *name;
    int mode;
    void (*readfunc)(char *buf, int buflen, int *bufpos);
    void (*writefunc)(const char *buf, int buflen, int *bufpos);
};


EEE_PROC_READFUNC(fsb) {
    int n = 0;
    int m = 0;
    int voltage = 0;
    eee_get_freq(&n, &m);
    voltage = (int)eee_get_voltage();
    EEE_PROC_PRINTF("%d %d %d\n", n, m, voltage);
}

EEE_PROC_WRITEFUNC(fsb) {
    int n = 70;     // sensible defaults
    int m = 24;
    int voltage = 0;
    EEE_PROC_SCANF(3, "%i %i %i", &n, &m, &voltage);
    eee_set_freq(n, m);
    eee_set_voltage(voltage);
}

EEE_PROC_READFUNC(pll) {
    eee_pll_read();
    EEE_PROC_MEMCPY(eee_pll_data, eee_pll_datalen);
}

EEE_PROC_READFUNC(fan_speed) {
    int speed = eee_fan_get_speed();
    EEE_PROC_PRINTF("%d\n", speed);
}

EEE_PROC_WRITEFUNC(fan_speed) {
    unsigned int speed = 0;
    EEE_PROC_SCANF(1, "%u", &speed);
    eee_fan_set_speed(speed);
}

EEE_PROC_READFUNC(fan_rpm) {
    int rpm = eee_fan_get_rpm();
    EEE_PROC_PRINTF("%d\n", rpm);
}

EEE_PROC_READFUNC(fan_manual) {
    EEE_PROC_PRINTF("%d\n", eee_fan_get_manual());
}

EEE_PROC_WRITEFUNC(fan_manual) {
    int manual = 0;
    EEE_PROC_SCANF(1, "%i", &manual);
    eee_fan_set_manual(manual);
}

#if 0
EEE_PROC_READFUNC(fan_mode) {
    enum eee_fan_mode mode = eee_fan_get_mode();
    switch (mode) {
        case Manual:    EEE_PROC_PRINTF("manual\n");
                        break;
        case Automatic: EEE_PROC_PRINTF("auto\n");
                        break;
        case Embedded:  EEE_PROC_PRINTF("embedded\n");
                        break;
    }
}

EEE_PROC_WRITEFUNC(fan_mode) {
    enum eee_fan_mode mode = Automatic;
    char inputstr[16];
    EEE_PROC_SCANF(1, "%15s", inputstr);
    if (strcmp(inputstr, "manual") == 0) {
        mode = Manual;
    } else if (strcmp(inputstr, "auto") == 0) {
        mode = Automatic;
    } else if (strcmp(inputstr, "embedded") == 0) {
        mode = Embedded;
    }
    eee_fan_set_mode(mode);
}
#endif

EEE_PROC_READFUNC(temperature) {
    unsigned int t = eee_get_temperature();
    EEE_PROC_PRINTF("%d\n", t);
}

EEE_PROC_FILES_BEGIN
    EEE_PROC_RW(fsb,            0644),
    EEE_PROC_RO(pll,            0400),
    EEE_PROC_RW(fan_speed,      0644),
    EEE_PROC_RO(fan_rpm,        0444),
    EEE_PROC_RW(fan_manual,     0644),
    EEE_PROC_RO(temperature,    0444),
EEE_PROC_FILES_END
    

int eee_proc_readfunc(char *buffer, char **buffer_location, off_t offset,
                      int buffer_length, int *eof, void *data)
{
    struct eee_proc_file *procfile = (struct eee_proc_file *)data;
    int bufpos = 0;

    if (!procfile || !procfile->readfunc) {
        return -EIO;
    }

    *eof = 1;
    if (offset > 0) {
        return 0;
    }

    (*procfile->readfunc)(buffer, buffer_length, &bufpos);
    return bufpos;
}

int eee_proc_writefunc(struct file *file, const char *buffer,
                       unsigned long count, void *data)
{
    char userdata[129];
    int bufpos = 0;
    struct eee_proc_file *procfile = (struct eee_proc_file *)data;

    if (!procfile || !procfile->writefunc) {
        return -EIO;
    }

    if (copy_from_user(userdata, buffer, (count > 128) ? 128 : count)) {
        printk(KERN_DEBUG "eee: copy_from_user() failed\n");
        return -EIO;
    }
    userdata[128] = 0;      // So that sscanf() doesn't overflow...

    (*procfile->writefunc)(userdata, count, &bufpos);
    return count;
}

int eee_proc_init(void) {
    int i;

    /* Create the /proc/eee directory. */
    eee_proc_rootdir = proc_mkdir("eee", NULL);
    if (!eee_proc_rootdir) {
        printk(KERN_ERR "eee: Unable to create /proc/eee\n");
        return false;
    }

    /* Create the individual proc files. */
    for (i=0; eee_proc_files[i].name; i++) {
        struct proc_dir_entry *proc_file;
        struct eee_proc_file *f = &eee_proc_files[i];

        proc_file = create_proc_entry(f->name, f->mode, eee_proc_rootdir);
        if (!proc_file) {
            printk(KERN_ERR "eee: Unable to create /proc/eee/%s", f->name);
            goto proc_init_cleanup;
        }
        proc_file->read_proc = &eee_proc_readfunc;
        if (f->writefunc) {
            proc_file->write_proc = &eee_proc_writefunc;
        }
        proc_file->data = f;
        proc_file->mode = S_IFREG | f->mode;
        proc_file->uid = 0;
        proc_file->gid = 0;
    }
    return true;

    /* We had an error, so cleanup all of the proc files... */
proc_init_cleanup:
    for (; i >= 0; i--) {
        remove_proc_entry(eee_proc_files[i].name, eee_proc_rootdir);
    }
    remove_proc_entry("eee", NULL);
    return false;
}

void eee_proc_cleanup(void) {
    int i;
    for (i = 0; eee_proc_files[i].name; i++) {
        remove_proc_entry(eee_proc_files[i].name, eee_proc_rootdir);
    }
    remove_proc_entry("eee", NULL);
}



/*** Module initialization ***/

int init_module(void) {
    int ret;
    ret = eee_pll_init();
    if(ret) return ret;
    eee_proc_init();
    printk(KERN_NOTICE "Asus eeePC extras, version %s\n", EEE_VERSION);
    return 0;
}

void cleanup_module(void) {
    eee_pll_cleanup();
    eee_proc_cleanup();
}

Makefile inchangé:

obj-m += eee.o
all:
    make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules
clean:
    make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean

J'ajoute ensuite ma dernière révision du script proceee.sh, remanié selon mes besoins, d'après le script original de fiasko:

#/bin/sh

#PROCEEE V1.3 FEB 2012
#7corp
#by JAQUIN J.

clear
echo -e "\033[32;7;1m              PROCEEE              "
echo -e "\033[0;32m"
INIT=$(cut -c1-8 /proc/eee/fsb)
if [ "$INIT" = "70 24 0" ]
then CONF="def";VSET=0;CL=32
else CONF="man";VSET=1;CL=33
fi
FSB=$(cut -c1-3 /proc/eee/fsb) 
FREQ=$(((900*$FSB)/100))
if [ $FREQ -gt 900 ]
then CPU="\033[33;5;1m"
else CPU="\033[32;1m"
fi
ROT=$(cut -c1-5 /proc/eee/fan_rpm)
TEMP=$(cut -c1-2 /proc/eee/temperature)
grep -q 0 /proc/eee/fan_manual
if [ $? -eq 0 ]
then CLV="\033[0;32;1m"
VENT="(auto.)"
else VENT="(manu.)";CLV="\033[0;33;5;1m"
fi
echo
echo "PROCESSEUR(MHz) FSB(MHz) V(set) CONF. VENTILATEUR(T/min) TEMPERATURE(°C)"
echo -e -n "$CPU   $FREQ"
echo -e -n "\033[0;32;1m           $FSB"
echo -e -n "\033[0;32;1m     $VSET"
echo -e -n "\033[$CL;1m      $CONF"
echo -e -n "\033[0;32;1m    $ROT";echo -e -n "$CLV$VENT"
echo -e -n "\033[0;32;1m            $TEMP"
echo
echo
echo
echo
echo -e "\033[1m  1-configuration par défaut"
echo
echo -e "\033[1m  2-configuration débridée"
echo
echo -e "\033[1m  3-configuration manuelle "
echo
echo -e "\033[1m  4-ventilateur "
echo
echo -e "\033[1m  5-benchmark"
echo
echo -e "\033[1m  6-rafraichir "
echo
echo -e "\033[1m  7-quitter "
echo
echo
read M
case $M in
   1) MM=1;;
   2) MM=2;;
   3) MM=3;;
   4) MM=4;;
   5) MM=5;;
   6) bash proceee.sh;;
   7) clear;echo -e "\033[32;7;5;1m";echo -e "\033[0;32m";exit;exit;;
   *) bash proceee.sh;;
esac

#CONFIGURATION PAR DEFAUT#

if [ $MM -eq 1 ]
then
    FSB1=70
    COND=0
    VV=0
    k=0
    if [ $FSB1 -le $FSB ] #DIMINUER LA FREQUENCE DU BUS PAR PAS DE 1MHZ#
    then FSB2=$FSB
        while [ $FSB2 -gt $FSB1 ]
        do
        FSB2="$(($FSB2-1))"
        sudo  echo "$FSB2 24 1" >> /proc/eee/fsb
        sleep 1
        if [ $k -eq 0 ] 
        then FREQ0=$(((900*$FSB)/100))
         clear;echo -e "\033[0;33;7;5;1m          PROCEEE...ING             ";echo;echo
        echo -n -e "\033[0;32;1m$FREQ0 "
        fi 
        echo -n -e "\033[0;32;1m="
        k="$(($k+1))"
        FREQ=$(((900*$FSB2)/100))
        done
    echo -n -e "\033[0;32;1m> $FREQ"
    echo -n -e "\033[0;32;1m DEF.V(set)=0"
    fi
    if [ $FSB1 -ge $FSB ] #AUGMENTER LA FREQUENCE DU BUS PAR PAS DE 1MHZ#
    then FSB2=$FSB
        while [ $FSB2 -lt $FSB1 ]
        do
        FSB2="$(($FSB2+1))"
        sudo  echo "$FSB2 24 0" >> /proc/eee/fsb
        sleep 1
        if [ $k -eq 0 ] 
        then FREQ0=$(((900*$FSB)/100))
        clear;echo -e "\033[0;33;7;5;1m        PROCEEE....ING              ";echo;echo 
        echo -n -e "\033[0;32;1m$FREQ0 "
        fi
        echo -n -e "\033[0;32;1m="
        k="$(($k+1))"
        FREQ=$(((900*$FSB2)/100))
        done
    echo -n -e "\033[0;32;1m> $FREQ"
    echo -n -e "\033[0;32;1m DEF.V(set)=0"
    fi
sudo echo "70 24 0" >> /proc/eee/fsb
sudo echo "0" >> /proc/eee/fan_manual
sleep 3
bash proceee.sh
fi

#CONFIGURATION DÉBRIDÉE#

if [ $MM -eq 2 ]
then
    FSB1=100
    k=0
    if [ $FSB1 -le $FSB ] #DIMINUER LA FREQUENCE DU BUS PAR PAS DE 1MHZ#
    then FSB2=$FSB
        while [ $FSB2 -gt $FSB1 ]
        do
        FSB2="$(($FSB2-1))"
        sudo  echo "$FSB2 24 1" >> /proc/eee/fsb
        sleep 1
        if [ $k -eq 0 ] 
        then FREQ0=$(((900*$FSB)/100))
         clear;echo -e "\033[0;33;7;5;1m          PROCEEE...ING             ";echo;echo
        echo -n -e "\033[0;32;1m$FREQ0 "
        fi 
        echo -n -e "\033[0;32;1m="
        k="$(($k+1))"
        FREQ=$(((900*$FSB2)/100))
        done
    echo -n -e "\033[0;32;1m> $FREQ"
    echo -n -e "\033[0;32;1m V(set)=1"
    fi
    if [ $FSB1 -ge $FSB ] #AUGMENTER LA FREQUENCE DU BUS PAR PAS DE 1MHZ#
    then FSB2=$FSB
        while [ $FSB2 -lt $FSB1 ]
        do
        FSB2="$(($FSB2+1))"
        sudo  echo "$FSB2 24 1" >> /proc/eee/fsb
        sleep 1
        if [ $k -eq 0 ] 
        then FREQ0=$(((900*$FSB)/100))
        clear;echo -e "\033[0;33;7;5;1m        PROCEEE....ING              ";echo;echo 
        echo -n -e "\033[0;32;1m$FREQ0 "
        fi
        echo -n -e "\033[0;32;1m="
        k="$(($k+1))"
        FREQ=$(((900*$FSB2)/100))
        done
    echo -n -e "\033[0;32;1m> $FREQ"
    echo -n -e "\033[0;32;1m V(set)=1"
    fi
sudo echo "100 24 1" >> /proc/eee/fsb
sudo echo "0" >> /proc/eee/fan_manual
sleep 3
bash proceee.sh
fi

#CONFIGURATION MANUELLE#

if [ $MM -eq 3 ]
then
clear
SEC=0
    while [ $SEC -eq 0 ]
    do
    clear
    echo -e "\033[32;5;7;1m              PROCEEE              "
    echo -e "\033[0;32m";echo
    echo -n -e "\033[0;32;1mVotre cpu est cadencé à: ";echo -e -n "\033[32;7;1m $FREQ MHz ";echo -e "\033[0;32m";echo
    echo -n -e "\033[0;32;1mRéglage souhaité(360<R<990)? :";echo -e -n "\033[32;7;1m";read FREQ1
    FSB1=$(echo "scale=0; ((($FREQ1*100)/900)*100)/100"|bc)
    VV=1
    if [ $FSB1 -le 110 ] #FSB MAX#
    then SEC=1
        if [ $FSB1 -ge 40 ] #FSB MIN#
        then SEC=1
        else SEC=0
        fi
    fi
    done
k=0
    if [ $FSB1 -le $FSB ]
    then FSB2=$FSB
        while [ $FSB2 -gt $FSB1 ]
        do
        FSB2="$(($FSB2-1))"
        sudo echo "$FSB2 24 1" >> /proc/eee/fsb
        sleep 1
            if [ $k -eq 0 ] 
            then FREQ0=$(((900*$FSB)/100))
            clear;echo -e "\033[0;33;7;5;1m          PROCEEE...ING             ";echo;echo
            echo -n -e "\033[0;32;1m$FREQ0 "
            fi
        FREQ=$(((900*$FSB2)/100)) 
        echo -n -e "\033[0;32;1m="
        k="$(($k+1))"
        done
    echo -n -e "\033[0;32;1m> $FREQ"
    FREQ=$(((900*$FSB2)/100))
    echo
    echo
    echo -e -n "\033[0;32;1mSuccesfull!! :-) processeur cadencé à :";echo -e -n "\033[33;7;1;5m$FREQ MHz"
    echo -e "\033[0;32m"
    fi
    if [ $FSB1 -ge $FSB ]
    then FSB2=$FSB
        while [ $FSB2 -lt $FSB1 ]
        do
        FSB2="$(($FSB2+1))"
        sudo echo "$FSB2 24 1" >> /proc/eee/fsb
        sleep 1
            if [ $k -eq 0 ] 
            then FREQ0=$(((900*$FSB)/100))
            clear;echo -e "\033[0;33;7;5;1m          PROCEEE...ING             ";echo;echo
            echo -n -e "\033[0;32;1m$FREQ0 "
            fi
        FREQ=$(((900*$FSB2)/100)) 
        echo -n -e "\033[0;32;1m="
        k="$(($k+1))"
        done
    echo -n -e "\033[0;32;1m> $FREQ"
    FREQ=$(((900*$FSB2)/100))
    echo
    echo
    echo -e -n "\033[0;32;1mSuccesfull!! :-) processeur cadencé à :";echo -e -n "\033[33;7;1;5m$FREQ MHz"
    echo -e "\033[0;32m"
    fi
echo
echo
echo -n -e "\033[0;32;1mVoulez vous régler votre ventilateur:(o/n)?";echo -e -n "\033[32;7;1m";read REGV
case $REGV in
 "o") MM=4;;
   *) bash proceee.sh;;
esac
sleep 3
bash proceee.sh
fi

#VENTILATEUR#

if [ $MM -eq 4 ]
then ROT=$(cut -c1-5 /proc/eee/fan_rpm);TEMP=$(cut -c1-2 /proc/eee/temperature)
clear
echo -e "\033[32;7;1m              FANEEE              "
echo
echo -e -n "\033[0;32;1m$ROT(T/min)  ";echo -e -n "$CLV$VENT";echo -e -n "\033[0;32;1m  TEMP: $TEMP°C  "
echo
echo
manu=1
grep -q 0 /proc/eee/fan_manual
    if [ $? -eq 1 ]
    then
    echo
    echo
    echo -e -n "\033[0;32;1mMettre le ventilateur en auto(o/n)?:";echo -e -n "\033[32;7;1m";read AUTO
        if [ "$AUTO" = "o" ]
        then
        sudo sh -c 'echo 0 > /proc/eee/fan_manual'
        manu=0
        fi
    fi
SECV=0
    if [ $manu -eq 1 ]
    then
        while [ $SECV -eq 0 ]
        do
        echo
        echo
        echo -e -n "\033[0;32;1mValeur indice (30<V<100)?:";echo -e -n "\033[32;7;1m";read MAN;echo
            if [ $MAN -le 100 ]
            then SECV=1
                if [ $MAN -ge 30 ]
                then SECV=1
                else SECV=0
                fi
            fi
        done
    MAN0=$(cut -c1-3 /proc/eee/fan_speed)
        if [ $MAN -le $MAN0 ]
        then MAN1=$MAN0
            while [ $MAN1 -gt $MAN ]
            do
            MAN1="$(($MAN1-1))"
            sudo echo "1" >> /proc/eee/fan_manual
            sudo echo "$MAN1" >> /proc/eee/fan_speed
            done
        fi
        if [ $MAN -ge $MAN0 ]
            if [ $MAN0 -eq 0 ]
            then MAN0=30
            fi
        then MAN1=$MAN0
            while [ $MAN1 -lt $MAN ]
            do
            MAN1="$(($MAN1+1))"
            sudo echo "1" >> /proc/eee/fan_manual
            sudo echo "$MAN1" >> /proc/eee/fan_speed
            done
        fi
    fi
sleep 3
bash proceee.sh
fi

#BENCHMARK#

if [ $MM -eq 5 ]
then
    clear
    echo -e "\033[32;7;1m              TESTEEE              "
    echo -e "\033[0;32m"
    INIT=$(cut -c1-8 /proc/eee/fsb)
    if [ "$INIT" = "70 24 0" ]
    then CONF="def";VSET=0;CL=32
    else CONF="man";VSET=1;CL=33
    fi
    FSB=$(cut -c1-3 /proc/eee/fsb) 
    FREQ=$(((900*$FSB)/100))
    if [ $FREQ -gt 900 ]
    then CPU="\033[33;1m"
    else CPU="\033[32;1m"
    fi
    ROT=$(cut -c1-5 /proc/eee/fan_rpm)
    TEMP=$(cut -c1-2 /proc/eee/temperature)
    grep -q 0 /proc/eee/fan_manual
    if [ $? -eq 0 ]
    then CLV="\033[0;32;1m"
    VENT="(auto.)"
    else VENT="(manu.)";CLV="\033[0;33;1m"
    fi
    echo
    echo "PROCESSEUR(MHz) FSB(MHz) V(set) CONF. VENTILATEUR(T/min) TEMPERATURE(°C)"
    echo -e -n "$CPU   $FREQ"
    echo -e -n "\033[0;32;1m           $FSB"
    echo -e -n "\033[0;32;1m     $VSET"
    echo -e -n "\033[$CL;1m      $CONF"
    echo -e -n "\033[0;32;1m    $ROT";echo -e -n "$CLV$VENT"
    echo -e -n "\033[0;32;1m            $TEMP"
    echo
    echo
    echo -e "\033[0;32;1m --> Arrêtez les roues en appuyant sur la touche ÉCHAP pour revenir au menu "
    echo;sleep 3
    glxgears -info;sleep 3;bash proceee.sh
fi

A des fins de compatibilité, je vous conseille de lancer ce script avec bash et non sh. Je vous passe les étapes de bases citées dans ce post.

Je travaille sur une automatisation du processus overclock/underclock en fonction de l'usage de l'Eee PC: 630MHz si veille, hibernation, batterie ou écran rabattu; 900MHz sinon. Ce travail est basé sur les scripts de motard13500 et fredr et sur le chapitre "Hibernating/suspending overclocked PC" de la page suivante: howto:overclockfsb.
Je mettrai le résultat en ligne une fois les tests terminés. D'ici là, faites bon usage de tout ceci.


Tant qu'il y aura Windows, je jouerai le Magicien d'Oz...

Hors ligne