URL: https://linuxfr.org/forums/linux-general/posts/dev-fb0-apparement-j-ai-pas-tout-compris Title: /dev/fb0 apparement j'ai pas tout compris Authors: cosmoff Date: 2021年07月05日T18:54:38+02:00 License: CC By-SA Tags: Score: 4 Bonjour à tous, j'aimerai en écrivant directement dans /dev/fb0 éteindre mon écran, en realité mettre toutes les leds de mon écran à 0. J'ai donc fait ce code : ```C #include #include #include #include #include #include #include #include #include #include #include int main(int argc, char const *argv[]) { //set scheduler to max priority struct sched_param sch_param; sch_param.sched_priority = 99; if( sched_setscheduler(getpid(), SCHED_FIFO, &sch_param) < 0) { printf("error sched_setscheduler : %s\n", strerror(errno)); return 1; } //get fd int fb_fd = open("/dev/fb0", O_RDWR); if ( fb_fd < 0) { printf("error open fb : %s\n", strerror(errno)); return 1; } // Get fixed screen information struct fb_var_screeninfo vinfo; struct fb_fix_screeninfo finfo; if (ioctl(fb_fd, FBIOGET_FSCREENINFO, &finfo) < 0) { printf("error ioctl FBIOGET_FSCREENINFO : %s\n", strerror(errno)); return 1; } // Get variable screen information if (ioctl(fb_fd, FBIOGET_VSCREENINFO, &vinfo) < 0) { printf("error ioctl FBIOGET_VSCREENINFO : %s\n", strerror(errno)); return 1; } printf("%dx%d, %dbpp\n", vinfo.xres, vinfo.yres, vinfo.bits_per_pixel); // Figure out the size of the screen in bytes size_t screenSize = vinfo.xres * vinfo.yres * vinfo.bits_per_pixel / 8; printf("screenSize = %li\n", screenSize); unsigned char* fb = mmap(NULL, screenSize, PROT_READ | PROT_WRITE, MAP_SHARED, fb_fd, 0); if ( fb == NULL) { printf("error mmap from fb : %s\n", strerror(errno)); return 1; } printf("address from fb : %p\n", fb); int stop = 10000; // value initialize in random in order to stop the loop size_t count = screenSize/4; while (1) { int * tmp = (int*)fb; for (size_t i = 0; i < count; i++) { *tmp++ = 0; } stop--; if(stop == 0) break; } return 0; } ``` Mon premier probleme c'est que l'écran ne s'éteind jamais, il n'y a meme pas un soupcon d'une baisse de luminosité, pourtant ce que je met ne m'a pas l'air si déconnant. j'ai meme mis à un moment de désespoir intense, la priorité de mon processus au max au cas ou, mais non rien. Je suis étonné néanmoins par l'adresse que me retourne mmap, il ne me retourne jamais la meme adresse, j'en déduis donc qu'il s'agit d'une adresse virtuelle. Mais je pensais que /dev/fb0 retournait justement une adresse physique. merci d'avance pour vos remarques et votre aide

AltStyle によって変換されたページ (->オリジナル) /