qemu

本文介绍了如何编译u-boot、linux kernel,然后用qemu启动u-boot和linux kernel,达到与开发板上一样的学习效果!

虽然已经买了2440开发板,但是在实际学习开发过程中,还是觉得不方便,既然这样,那就用qemu模拟2440开发板,让学习来的更方便些吧!有些万一模拟机上模拟不出来的或者有问题的,再到开发板上验证!

下面是我5天正常上班工作之余的时间的成果,很开心,因为我感觉又像linux大神迈进了一大步!10/12/20139:13:23 PM

qemu-mini2440

http://repo.or.cz/w/qemu/mini2440.git

这个可以在windows下模拟mini2440,核心及全部外设,液晶包括其中。可以在程序窗口

中显示。还可以模拟sd卡,以及DM9000网卡驱动,可以映射到本地虚拟网卡上。

Get a local copy of the mini2440 repository with this command:

git clone https://code.google.com/p/mini2440/

git clone git://repo.or.cz/qemu/mini2440.git

mini2440 u-boot

git clone git://repo.or.cz/u-boot-openmoko.git

使用qemu 建立mini2440的模拟仿真环境

http://www.cnblogs.com/jinmu190/archive/2011/03/21/1990698.html

1.    首先下载安装qemu for mini2440

git clone git://repo.or.cz/qemu/mini2440.gitqemu

如果感觉速度慢,直接打包下载

http://repo.or.cz/w/qemu/mini2440.git/snapshot/HEAD.tar.gz

解压后,源代码的主目录中:

$  ./configure--target-list=arm-softmmu --prefix=/usr/local/qemu/mini2440

$  make -j4

$  sudo make install

个目标同时构建,jobs=4,一般来说编译速度会更快些)

然后将bin路径添加到环境变量中方便使用qemu-system-arm

可能出现的错误:

Error: zlib checkfailed:sudo apt-get install zlib1g-dev

ERROR: QEMU requiresSDL or Cocoa for graphical output:sudo apt-get -y installlibsdl-dev

生成安装的,不能apt-get install,自动安装的对mini2440单板不支持。

测试安装结果:

我们可以从QEMU下载页面中下载arm-test-0.2.tar.gzhttp://wiki.qemu.org/download/arm-test-0.2.tar.gz这是ARM Linux 2.6的测试内核和initrd磁盘镜像(感谢Paul Brook)。

方法一:

2.   下载u-boot for mini2440

git clone git://repo.or.cz/u-boot-openmoko/mini2440.gitu-boot

或者打包下载

http://repo.or.cz/w/u-boot-openmoko/mini2440.git/snapshot/HEAD.tar.gz

(注意采用打包下载的时候这几个包的文件名可能相同,注意区分)解压后,配置Makefile文件,打开Makefile文件,CROSS_COMPILE变量赋值,即自己所使用的交叉编译工具链,比如我的是arm-linux-,保存退出,找不到就不用改,另外(编译uboot的时候,大家可以将设置初始IP的代码修改为自己想要的IP,比如和自己主机IP一个网段,以方便以后的实验))输入

$     make mini2440_config

$     make -j4

几分钟编译完成后,即在当前目录下生成名为 u-boot.bin 的文件,注意如果想在之后使用u-boot 的nfs下载文件功能,需要将net/nfs.c文件中的NFS_TIMEOUT = 2UL修改为 NFS_TIMEOUT = 20000UL 否则会造成nfs文件下载失败。

然后将u-boot.bin文件拷贝到qemu-mini2440/mini2440文件夹下。将tools/mkimage加到环境变量中,kernel生成uImage需要使用此工具。

3.   下载 linux kernelfor mini2440

git clone git://repo.or.cz/linux-2.6/mini2440.gitkernel

(可以使用原mini2440开发板的内核源代码)

$     make mini2440_defconfig ARCH=arm

$     make -j4 ARCH=arm CROSS_COMPILE=arm-linux- uImage

之后会在arch/arm/boot/目录下生成uImage 文件,将此文件复制到qemu目录下的mini2440文件夹下,并将mini2440文件夹中的mini2440_start.sh作如下修改

添加cmd的 kernel 行为-kernel "$base/uImage" \,回到上层目录后运行

$     sh mini2440/mini2440_start.sh

网上说这时应该看到qemu启动后进入了u-boot界面下,输入命令

#   bootm

就会看到linux内核启动的画面。

Bullshit!!!!!!!!

让我一步步分析,最多进得去u-boot界面,但怎么可能看得见内核启动画面??!!

但是根据实际情况是看不见linux启动画面的,下面我们看看mini2440_start.sh做了哪些工作?

首先创建一个dd if=/dev/zero of="$name_nand" bs=2112 count=65536为128MB的nand flash镜像文件(包含OOB),但是此nand flash根本没有初始化,里面为全0x00,根本无法运行起来,想要运行起来情况方法二的flashing工具。

后面就是启动模拟器了:

qemu-system-arm-M mini2440 -serial stdio -mtdblock mini2440/ mini2440_nand128.bin -show-cursor-usb -usbdevice keyboard -usbdevice mouse -net nic,vlan=0 -net tap,vlan=0,ifname=tap0-monitor telnet::5555,server,nowait

此处经常报错Could not initialize device 'tap',网上给了一堆无用答案,实际上是要初始化一个虚拟网卡,看方法二。

其他的就不想分析了,此处就提供方法二qemu-system-arm多种实用参数吧!

方法二:

QEMU模拟FriendlyArm的Mini2440开发板

本文基于的开发环境是Ubuntu10.04和buildroot-2012.05.tar.gz。(其他版本的环境可能会出很多问题,所以编译u-boot和kernel时统一用此buildroot中的交叉编译工具)

2.      下载编译Buildroot (2012.05)

一般说来,我们需要三样东西来正常启动一个嵌入式操作系统:引导程序(bootloader),内核镜像和根文件系统镜像。那我们是不是接下来需要下载一个bootloader(比如u-boot,supervivi之类),编译之;下载任意版本的linux内核,编译之(当然要适配mini2440);一点一点生成自己的根文件系统,再制作成jffs2,yaffs2之类的格式呢?编译这三样东西的交叉编译工具链Cross-compiler toolchain 要制作。

交叉编译工具链和根文件系统都是一点一点制作。。。,很费时间()。虽然我们在制作根文件系统时是可以偷懒使用Busybox这样的“瑞士军刀”,但是还不够方便,Buildroot,一款超好用的开源软件,能一次过帮我们把交叉编译工具链和三样东西都生成出来。

首先我们下载Buildroot,Buildroot项目每三个月就有一个新版本,但是最好是使用buildroot-2012.05.tar.gz,其他较新版本会出很多错,最后会说到。首先我们安装wget这个小工具,便于下载Buildroot:

$ sudo apt-get install wget

接着下载Buildroot:

$ cd ~

$ wget http://buildroot.org/downloads/buildroot-2012.05.tar.gz

$ tar zxvf buildroot-2012.05.tar.gz

或者到buildroot主页http://buildroot.uclibc.org/download.html下载http://buildroot.uclibc.org/downloads/buildroot-2012.05.tar.bz2

在让Buildroot为我们生成三个镜像前,需要对其进行一些配置。Mini2440开发板的基本所需配置已经集成在Buildroot里了(众多defconfig文件中的一个),省了不少功夫。在此基础上,我们只需再进行少许配置,就可以让Buildroot开工了。

我们选取mini2440_defconfig来生成我们的.config文件,再用make menuconfig 进一步配置:

$ cd buildroot-2012.05

$ make mini2440_defconfig

$ make menuconfig

一个方便的配置窗口会跟着出现,是基于Kconfig的配置机制:

以下列出比较重要的几个编译选项,需要改动的几项用红色表示:

- Toolchains :在Toolchains目录里,Kernel Headers须要选取Linux内核版本的适配的编译链版本。默认是设置为3.3.x。后面的Kernel(内核版本)我使用的是3.3.7,所以没问题,这里不用改也可以。当然也可以使用诸如3.0.x这样的版本,只要跟之后的Kernel版本适配就好了。

- Bootloaders :默认是U-boot,也可以选用其他版本的Bootloader。本文就用默认的U-boot。

- Kernel :Kernel version默认是3.0.4,因为之前Toolchains目录选择的是3.3.x版本,所以这里须要改选,比如3.3.7版本。

- Package Selection for the target :Target packages中Busybox已经包含在里面了,我们也可以选择更多的项目,比如Qt,EFL,directfb之类的图形库。在Graphic libraries and application子目录里选择。

字节和16字节的ECC的NAND类型。在Flash Type这项,改为NAND flash with 512B Page and 16 KB erasesize。

这些都配置好之后,就可以请出我们最喜欢的命令了-- make :

$ make

此时你可以倒杯茶,或者可以烤一只鸡。。。总之干点别的,让Buildroot忙活去吧。如果中间出现错误,一般是没装必要的东西,照错误提示安装就好,然后接着make。

如果一切顺利,make 结束后,在buildroot-2012.05目录的output/images/子目录下可以找到生成的三个文件:

- u-boot.bin :bootloader的镜像

- uImage :u-boot格式的(用mkimage命令生成的)Linux内核镜像

- rootfs.jffs2 :jffs2格式的根文件系统镜像(这个工程默认用的是jffs2根文件系统)

至此,Buildroot完成了他艰巨的任务,可以让他一边休息去了。我们进入下面的系统制作和启动部分。

如果我们想用其中的工具,可以将/work/qemu/buildroot-2012.05/output/host/usr/bin加入到环境变量中。

另外,此工具中的linux源码解压到了:buildroot-2012.05/output/build/linux-3.3.7目录。

也可以用dl目录中的linux-3.3.7.tar.bz2,然后用下面两条命令对其进行编译,是一样的。

$       make mini2440_defconfigARCH=arm                                使用默认配置

$       make menuconfigARCH=arm                   配置内核的时候要带选项

$       make -j4 ARCH=armCROSS_COMPILE=arm-linux- uImage                                编译内核

待会儿就知道,这个目录有多帅,默认就可以在qemu中正确运行^_^

3.      在QEMU中运行编译好的系统

a)        生成NAND镜像并初始化

在开始前,先说一下:如果你想要比较快捷的话,可以直接去看d)、强大的工具-- Flashimg,Flashimg是一个不错的软件,可以使用内核镜像,bootloader镜像和根文件系统镜像快速生成NAND或NOR文件。共享在git 上面,http://gitorious.org/flashimg

如果在QEMU里生成NAND的话,会花不少时间。所以我们可以利用闲置的内存(RAM)--  tmpfs

$ mkdir nand

$ sudo mount -t tmpfs none nand/

我们接下来将从零开始生成一个NAND镜像文件。一般NAND的大小我们可以设定成64MB (NOR镜像文件一般设为2MB)。我们来做一下简单的计算:要生成一个64MB的NAND,每个块是512字节,还要加上16字节的ECC,所以每个块是528字节。总共需要的块数是:(64 * 1024 * 1024) / 528 = 127100

用dd 命令来生成一个NAND镜像:

$ dd if=/dev/zero of=nand/nand.bin bs=528 count=127100

我们现在有了一个NAND镜像文件了,接下来要使用u-boot来初始化它。我们需要首先将Buildroot替我们生成的u-boot.bin 文件拷贝到nand.bin 相同的文件夹下:

$ cp ~/buildroot-2012.05/output/images/u-boot.bin ~/nand/

启动U-boot以便进行NAND的初始化:

$ qemu-system-arm -M mini2440 -serial stdio -mtdblocknand/nand.bin

U-boot启动了,并且会显示一些Warning信息:

NAND: Bad block table not found for chip 0

Bad block table not found for chip 0

64 MiB

*** Warning - bad CRC or NAND, using default environment

别担心,显示这些信息很正常,因为我们的NAND文件还没初始化呢。接下来初始化:

MINI2440 # nand scrub

MINI2440 # nand createbbt

MINI2440 # reset

至此,我们的NAND文件已经准备好了。现在可以将其从tmpfs拷贝到电脑硬盘,然后卸载掉tmpfs。

$ cp nand/nand.bin .

$ sudo umount nand/

$ rmdir nand

b)       基于NFS启动

这里插进一段用NFS启动的实做。

在嵌入式开发阶段,通常我们会操作一个挂载在NFS上的系统,这样更加方便,快捷,无需每次都烧写NAND或NOR文件。接下来我们用NFS启动系统:

之前在~/buildroot-2012.05/output/images/  这个目录里,除了生成rootfs.jffs2文件外,还生成了rootfs.tar文件,是根文件系统的压缩文件包。我们在/srv 文件夹下新建一个nfsroot文件夹以储存解压的根文件系统:

$ sudo mkdir /srv/nfsroot/

$ cd /srv/nfsroot/

$ sudo tar xvf ~/buildroot-2012.05/output/images/rootfs.tar

接着需要在/etc/exportfs 文件里增加以下一行,使NFS能认识/srv/nfsroot/这个目录:

/srv/nfsroot/ 192.168.42.0/24(rw,sync,no_root_squash,no_subtree_check)

使其生效:

$ sudo exportfs -r

然后,我们生成并配置一个 tap0 接口:

$ sudo tunctl -u $USER -t tap0

$ sudo ifconfig tap0 192.168.42.1

此时ifconfig发现多了一块网卡。

(当启动qemu使用了-net nic -nettap,ifname=tap0参数时,报错warning: could not configure /dev/net/tun: no virtual network emulationCould not initialize device 'tap',就需要按照上面方法配置一下网卡,这才是正解,网上给出的答案又麻烦又无效;但是记住,经过此设置后,ubuntu是无法连接外网的,此设置重启后无效)

现在我们已经可以来启动QEMU了,不过在此之前,还要将uImage也拷贝到HOME目录(nand.bin 已经在HOME目录了):

$ cd ~

$ cp ~/buildroot-2012.05/output/images/uImage .

Ok,我们启动QEMU+NFS:

$ qemu-system-arm -M mini2440 -serial stdio -mtdblocknand.bin -kernel uImage -net nic -net tap,ifname=tap0,script=no,downscript=no

MINI2440 # setenv bootargs root=/dev/nfs rw nfsroot=192.168.42.1:/srv/nfsroot/ip=192.168.42.2

MINI2440 # bootm

输入Buildroot的密码,默认是root, 此时系统启动了,可以看到QEMU的窗口和可爱的Linux小企鹅。

c)        基于NAND镜像启动

因为以之前的a)生成的nand.bin来继续生成最终版的nand.bin(还要往里面添加u-boot.bin,uImage和rootfs.jffs2)过程太过繁琐且容易出错,在此我就不赘述了,可以参看网上的相关文章。我们直接用一个更强大的工具来生成最终版的nand.bin 。更方便,且不容易出错。

d)       强大的工具 -- Flashimg

如前面时提到的,flashimg是一个由网友FabriceJouhaud 开发的软件,可以很快捷地生成NAND或NOR镜像文件。我们首先下载flashimg:

$ git clone git://gitorious.org/flashimg/flashimg.git

编译安装

$ ./autogen.sh

$ ./configure

$ make

$ sudo make install

要生成NAND或NOR镜像文件,可以先把之前Buildroot替我们生成的三个文件:u-boot.bin, uImage和rootfs.jffs2 拷贝到flashimg文件夹下,生成NAND或NOR镜像文件:

$       flashimg -s64M -t nand -f nand.bin -p uboot.part -w boot,u-boot.bin -w kernel,uImage -w root,rootfs.jffs2-z 512

$       flashimg-s 2M -t nor -f nor.bin -p uboot.part -w boot,u-boot.bin -w kernel,uImage -w root,rootfs.jffs2

最后,启动系统,我们以NAND文件为例:

$       qemu-system-arm-M mini2440 -serial stdio -mtdblock nand.bin -usbdevice mouse

启动之后,还需要配置一下(其中mini2440=3tb 是为了使屏幕分辨率成为320*240,横向显示。默认是240*320,是竖着的)

MINI2440 # nboot kernel

MINI2440 # setenv bootargs root=/dev/mtdblock3rootfstype=jffs2 console=ttySAC0,115200 mini2440=3tb

MINI2440 # saveenv

MINI2440 # bootm

输入Buildroot的密码,默认是    root

我们再一次看到了亲切的小企鹅。

(用Vmware 6.5.2build-156735 | ubuntu-10.04.2-dvd-i386.iso | qemu-system-arm QEMU PC emulator version0.10.50 | buildroot-2012.05.tar.gz测试通过,如果不使用图形界面运行正常,需要使用图形界面就要用ssh登陆后启动2440系统一次,然后虚拟机中启动2440系统,才能成功看见小企鹅,交替运行,否则报错:Floating point exception;

使用buildroot-2013.08.1.tar.bz2时,kernel中后不断出错:WARNING:at drivers/mtd/nand/nand_base.c:846 nand_wait+0x14c/0x16c()  [<c0148ff8>] (jffs2_flush_wbuf_gc+0xb8/0x13c)from [<c002a9b0>] (process_one_work+0x10c/0x350))

实际使用过程中的说明:

1、qemu-system-arm -M mini2440 -serial stdio -mtdblock nand.bin -usbdevicemouse 在nand.bin中可以不需要u-boot.bin,在当前执行这条命令的文件夹下有u-boot.bin即可,一开始进入的u-boot是当前目录下的u-boot.bin。

2、用jz2440的u-boot.bin可以在menu中f选项格式化nandflash文件nand.bin。

3、u-boot中可以使用tftp下载文件到内存,使用tftp是只需要设置服务器IP即可,自己的ip设置后无法ping通。使用u-boot中的tftp前提是按照b)中设置网卡和启动方式。

4、在启动qemu时如果出现错误Floating point exception (core dumped),可以添加-nographic选项,在通常情况下,Qemu使用SDL来显示VGA输出.使用这个选项,我们可以禁止所有的图形输出,这样Qemu只是一个简单的命令行程序.模拟的串口将会重定向到命令行.所以,我们仍然可以在Qemu平台上使用串口命令来调试Linux内核.

5、带网络功能,不带图形界面的启动命令:qemu-system-arm -M mini2440-serial stdio -mtdblock nand.bin -usbdevice mouse -kernel uImage -net nic -net tap,ifname=tap0,script=no,downscript=no-nographic

开发基本全部搞定,u-boot/kernel/nfs文件系统10/12/2013 8:58:58 PM

6、u-boot可以与主机tftp的设置为:ipaddr=10.0.0.111           serverip=10.27.100.117           tap0 10.27.100.200                   不在一个网段,不知道为什么,现在能用就行了

7、开发板nfs访问虚拟机,ifconfig 10.0.0.111                    mount -t nfs -o nolock 10.27.100.117:/work/nfs/nfsroot/work                   如果mount:mounting 10.27.100.117:/work/nfs/nfsroot on /mnt failed: Permission denied       则修改服务器的/work/nfs/nfsroot/10.27.100.117/24(rw,sync,no_root_squash,no_subtree_check)    的ip地址为*即可。

8、进入u-boot后以nfs挂载跟文件系统:setenv bootargs 'noinitrdmem=64M console=ttySAC0 root=/dev/nfs nfsroot=10.27.100.117:/work/nfs/nfsrootip=10.0.0.111'      以后开发应用程序或者驱动模块就方便了。

9、

qemu 调试

调试U-Boot

当调用QEMU时添加 -s 和-S 选项

•-s -gdbtcp::1234 的所写

•-S 在启动时停止CPU (键入'c'才会开始执行)

$ qemu-system-arm -M versatilepb -nographic-kernel u-boot -s -S

调试U-Boot时,加载文件'u-boot'到gdb(记住不是'u-boot.bin'),'u-boot'是一个ELF格式的文件,它含有所有调试时会用到的符号信息,不像'u-boot.bin'是在执行"stripe"命令后,剔除了调试信息的文件。另开一个控制台窗口执行ARM的交叉调试工具并加载文件'u-boot':

$ arm-none-linux-gnueabi-gdb u-boot

(gdb) target remote :1234

(gdb) b do_printenv

Breakpoint 1 at 0x10080f4: file cmd_nvedit.c, line 147.

(gdb) c

Continuing.

此时在QEMU的控制台窗口中, 将会有如下显示:

U-Boot 2010.06 (Aug 312010 - 16:23:16)

DRAM:  0 Bytes

Flash: 64 MiB

*** Warning - bad CRC, using default environment

In:    serial

Out:   serial

Err:   serial

Net:   SMC91111-0

VersatilePB #

在提示符"VersatilePB#"后输入U-Boot命令"printenv",它的执行将会被gdb中断:

VersatilePB # printenv

在gdb的控制台窗口中, 将会显示:

Breakpoint 1, do_printenv (cmdtp=0x1015520, flag=0, argc=1,argv=0xfddee4)

at cmd_nvedit.c:147

147            if (argc == 1) {

(gdb)

从这儿开始我们就可以使用普通的gdb调试命令进行调试了, 不错!

qemu-common

在Linux下编译安装QEMU在Linux下编译安装QEMU

1.系统环境及版本

Linux发行版本:ubuntu 8.04

安装QEMU-0.9.1

2.准备工作

在QEMU主页http://wiki.qemu.org/Index.html下载源代码并解压

建立编译环境:

$       sudo apt-get install build-essential

编译安装QEMU,最重要的工具就是gcc。在大多数主机,特别是x86架构的PC机上,gcc 4.x是不被QEMU所支持的。build-essential中包含的是gcc 4.x,为了正确编译,需要低版本的gcc 3.x(gcc32 或gcc34),低版本安装后,QEMU的配置脚本(configure script)在配置时会自动搜寻到。我安装的是gcc 3.4:

$       sudo apt-get install gcc-3.4cpp-3.4

安装QEMU需要SDL开发库的支持,可以在其下载页面上下载源代码编译安装,但是推荐在apt中安装,不容易出问题:

$       sudo apt-get install libsdl1.2-dev

另外,还需要安装zlib和ESD:

sudo apt-get install zlib1g-dev zlib1g-dbg libesd0-dev

3       编译安装QEMU

$       ./configure --prefix=/usr/local/qemu

不加上prefix选项也是可以的。这个选项的作用是指定安装目录。如果不指定prefix,则可执行文件默认放在/usr/local/bin,库文件默认放在/usr/local/lib,配置文件默认放在/usr/local/etc。由于QEMU不能用make uninstall的方法卸载,指定安装目录可以便于卸载(其实就是删掉整个安装目录)。

然后

$       make

$       sudo make install

至此,QEMU安装完成。

4.设置环境变量

如果./configure时使用了prefix选项,还需要设置环境变量PATH,否则bash是找不到qemu的命令的(除非你输入该命令的具体路径,如/usr/local/qemu/bin/qemu)。编辑/etc/profile

$       sudo vim /etc/profile

在文件中添加

PATH="$PATH:/usr/local/qemu/bin"export PATH

保存,退出,并用Ctrl+Alt+Backspace重新启动X Window。

qemu 模拟-arm-mini2440开发板-启动u-boot,kernel和nfs文件系统的更多相关文章

  1. qemu 模拟-arm-mini2440开发板-启动u-boot,kernel和nfs文件系统【转】

    转自:http://www.cnblogs.com/riskyer/p/3366001.html qemu 本文介绍了如何编译u-boot.linux kernel,然后用qemu启动u-boot和l ...

  2. 基于QEMU的ARM Cortex-A9开发板Vexpress-ca9的Linux内核的编译和运行

    宿主机:Ubuntu16.04 x64(Linux内核4.4.0) 交叉编译工具链:gcc-arm-linux-gnueabiarm-linux-gcc:4.4.3QEMU:2.5.0Linux ke ...

  3. 【记录】尝试用QEMU模拟ARM开发板去加载并运行Uboot,kernel,rootfs【转】

    转自:https://www.crifan.com/try_use_qemu_emulate_arm_board_to_load_and_run_uboot_kernel_rootfs/ [背景] 手 ...

  4. Qemu搭建ARM vexpress开发环境(二)----通过u-boot启动Linux内核

    Qemu搭建ARM vexpress开发环境(二)----通过u-boot启动Linux内核 标签(空格分隔): Qemu ARM Linux 在上文<Qemu搭建ARM vexpress开发环 ...

  5. ubuntu下使用qemu模拟ARM(六)------驱动程序【转】

    转自:http://blog.csdn.net/rfidunion/article/details/54709843 驱动程序分为在ubuntu上运行和在ARM开发板上运行两种,我们分别来进行测试 1 ...

  6. Qemu搭建ARM vexpress开发环境(一)

    Qemu搭建ARM vexpress开发环境(一) 标签(空格分隔): Qemu ARM Linux 嵌入式开发离不开硬件设备比如:开发板.外设等,但是如果只是想学习研究Linux内核,想学习Linu ...

  7. Qemu搭建ARM vexpress开发环境(三)----NFS网络根文件系统

    Qemu搭建ARM vexpress开发环境(三)----NFS网络根文件系统 标签(空格分隔): Qemu ARM Linux 经过上一篇<Qemu搭建ARM vexpress开发环境(二)- ...

  8. 【转帖】Linux系统上面qemu 模拟arm

    零基础在Linux系统搭建Qemu模拟arm https://blog.csdn.net/weixin_42489042/article/details/81145038 自己没搞定 改天再试试 感谢 ...

  9. 【基于mini2440开发板的交叉编译环境及内核树配置.

    在学习linux驱动开发过程中,交叉编译环境的配置及内核树的生成无疑是对linux不是十分了解的新人面前的一堵墙.高高大大的墙...笔者在初探这一方向时,就在这2个问题上苦恼了很久.查阅无数资料,大多 ...

随机推荐

  1. POJ 1276 (多重背包) Cash Machine

    题意: 有n种纸币,已知每种纸币的面值和数量,求所能凑成的不超过cash的最大总面值. 分析: 这道题自己写了一下TLE了,好可耻.. 找了份比较简洁的代码抄过来了..poj1276 #include ...

  2. css实现超出一行后用省略号显示

    css实现超出一行后用省略号显示 a{display:inline-block; text-overflow:ellipsis; white-space:nowrap; overflow:hidden ...

  3. POJ 1486 Sorting Slides (二分图关键匹配边)

    题意 给你n个幻灯片,每个幻灯片有个数字编号1~n,现在给每个幻灯片用A~Z进行编号,在该幻灯片范围内的数字都可能是该幻灯片的数字编号.问有多少个幻灯片的数字和字母确定的. 思路 确定幻灯片的数字就是 ...

  4. 省常中模拟 Test3 Day1

    tile 贪心 题意:给出一个矩形,用不同字母代表的正方形填充,要求相邻的方块字母不能相同,求字典序(将所有行拼接起来)最小的方案. 初步解法:一开始没怎么想,以为策略是每次填充一个尽量大的正方形.但 ...

  5. 省常中模拟 Test3 Day2

    matrix 找规律 题意:给定一个 N*N 的只有 0 和 1 的矩阵,有 Q 个操作,分三种:1. 将某行上的所有数字取反:2. 将某列上的所有数字取反:3. 输出 sum{ a[i][j]*a[ ...

  6. ffmpeg+rtsp+dss

    1. push stream to dss ffmpeg -f mpegts -re -i film.v -c:v libx264 -s 352x288 -aspect 4:3 -b:v 300k - ...

  7. POJ 1146 ID Codes (UVA146)

    // 求下一个排列// 如果已经是最后一个排列// 就输出 No Successor// stl 或 自己写个 生成排列 我测试了下 两个速率是一样的.只是代码长度不同 /* #include < ...

  8. 【转】u盘不显示盘符

    转自http://jingyan.baidu.com/article/f3ad7d0fd0793e09c3345b31.html 我的情况: 电脑只有一个c盘,插入u盘,u盘的盘符为d. 弹出u盘,但 ...

  9. bzoj 1001: [BeiJing2006]狼抓兔子 平面图最小割

    平面图跑最大流 可以转换为其对偶图跑最短路 一个环对应一个割  找到最小环(即最短路)极为所求,注意辅助边的建立 加入读入优化  不过时间还是一般  估计是dij写的不好   大神勿喷~~~ /*** ...

  10. CABasicAnimation 使用

    1. 基本使用 UIView * view = [[UIView alloc]initWithFrame:CGRectMake(50, 50, 50,50)]; view.backgroundColo ...