Welcome 微信登录

首页 / 操作系统 / Linux / Ubuntu Framebuffer学习笔记

一、环境搭建1. 直接在Ubuntu上运行Framebuffer默认Ubuntu是直接进入X视窗,如果要使用Framebuffer,需要修改内核引导参数:$ sudo gedit /etc/default/grub查找GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"把它改为GRUB_CMDLINE_LINUX_DEFAULT="quiet splash text vga=0x311" 这里text表示进入文本模式,vga=0x311表示使用Framebuffer显示驱动,0x311是指示色深和分辨率的参数  |640x480 800x600 1024x768 1280x1024----+-------------------------------------256 | 0x301   0x303 0x305 0x30732k | 0x310   0x313 0x316 0x31964k | 0x311   0x314 0x317 0x31A16M | 0x312   0x315 0x318 0x31B如果使用vga=0x311参数,必须使用后面提到的vesafb模块,并且取消黑名单,否则无法进入系统,需要光盘启动删除vga参数以还原$ sudo update-grub写入到/boot/grub/grub.cfg$ sudo gedit /etc/initramfs-tools/modules在其中加入:vesafb$ sudo gedit /etc/modprobe.d/blacklist-framebuffer.conf用#注释以下行# blacklist vesafb$ sudo update-initramfs -u(生成新的initrd)然后重启机器,即可进入Framebuffer如果要切换回X11,可以输入:$ startx有时候/boot/grub/grub.cfg的引导参数不正确导致系统无法引导,可以用光盘引导系统,挂载硬盘后直接修改/boot/grub/grub.cfg文件这样就可以跳过update-grub这一步。然后还原原有的引导参数进入X Window2. 使用qemu虚拟Linux需要编译Linux内核和busybox。此外还需要libncurses-dev和qemu。由于qemu可以直接加载内核和initrd,指定引导参数,所以不需要修改grub配置。(1)编译内核和安装qemu$ tar xjf linux-2.6.39.2.tar.bz2$ cd linux-2.6.39.2/$ make help$ make i386_defconf$ sudo apt-get install libncurses-dev$ make menuconfig$ make$ sudo apt-get install qemu$ qemu --help$ qemu -kernel arch/x86/boot/bzImage$ qemu -kernel arch/x86/boot/bzImage -append "noapic"有时候内核会这样崩溃:MP-BIOS BUG 8254 timer not connectedtrying to set up timer as Virtual Wire IRQ所以需要添加-append "noapic"参数(2) 修改内核配置,然后重新编译内核。注意,不同内核版本的配置不一样,我的内核配置作如下改动(用空格切换为*,不要切换为M):$ make menuconfigDevice Drivers  --->  Graphics support  --->   -*- Support for frame buffer devices  --->  [*]   VESA VGA graphics support 因为VESA支持彩色色深的显示。默认是不选的,只能是黑白控制台。Input device support  ---> [*]     Provide legacy /dev/psaux device 有些库如SDL在识别USB接口的鼠标时会寻找/dev/input/mice和/dev/psaux,我发现我编译的内核没有前者,所以用这个选项制造出/dev/psaux设备。File systems  --->  [*] Miscellaneous filesystems  ---><*>   Compressed ROM file system support (cramfs) 个人喜欢cramfs,不过不是必须的,可以用这个开关编译cramfs驱动,测试initramfs是否正常General setup  ---> [*]   Support initial ramdisks compressed using gzip [*] Embedded system默认i86内核的配置不支持gzip压缩的cpio格式initrd,所以需要手动打开它。最后重新编译内核:$ make(3) 编译busybox$ tar xjf busybox-1.18.5.tar.bz2$ cd busybox-1.18.5/$ make defconfig$ make menuconfig设置修改如下:Busybox Settings  --->  Build Options  --->[*] Build BusyBox as a static binary (no shared libs)  $ make $ make install默认文件安装在当前目录的_install目录下。(4) 制作cpio封包gzip压缩的initrd$ cd ../busybox-1.18.5/_install/$ mkdir proc sys dev etc etc/init.d tmp root usr lib$ gedit etc/init.d/rcS#!/bin/shmount -t proc none /procmount -t sysfs none /sys/sbin/mdev -s$ chmod +x etc/init.d/rcS$ cd ../../linux-2.6.39.2/$ gedit prerun.sh#!/bin/shcd ../busybox-1.18.5/_installfind . | cpio -o --format=newc > ../rootfs.imgcd .. gzip -c rootfs.img > rootfs.img.gzcd ../linux-2.6.39.2/$ . prerun.sh$ gedit run.sh#!/bin/shqemu -kernel ./arch/i386/boot/bzImage -initrd ../busybox-1.18.5/rootfs.img.gz  -append "root=/dev/ram rdinit=/sbin/init vga=0x312 noapic"注意这里用rdinit=,如果用init=就成了initramfs(内核会报告找不到合适的文件系统)关于vga=的参数设置见前面(决定色深和分辨率)$ . run.sh编译程序,然后用上面写的prerun.sh打包进rootfs.img.gz,然后运行run.sh跑qemu即可。如果程序是动态链接,需要特定的动态库,可以把依赖的动态库复制到_install/lib目录下,打包到rootfs.img.gz中。(5) 进入qemu的效果如下:
  • 1
  • 2
  • 下一页
Linux 安装php-5.2.17出现 libjpeg.(a|so) not found在Ubuntu上使用Eclipse创建OpenCV项目相关资讯      FrameBuffer  Ubuntu教程 
  • 让Linux开机进入字符界面的方法及  (04/11/2015 06:29:04)
  • Android4.0.4 framebuffer 支持32  (04/09/2013 09:38:10)
  • 让Ubuntu 12.10支持RAR和7Z文件解  (11/15/2012 18:51:50)
  • Ubuntu教程 - 使用Ubuntu拷贝CD和  (12/18/2013 14:38:16)
  • 完美安装Ubuntu 12.10最新AMD显卡  (11/27/2012 08:17:47)
  • Win 7硬盘安装Ubuntu 12.10  (11/05/2012 13:30:34)
本文评论 查看全部评论 (0)
表情: 姓名: 字数