在某些情况下,如果我们没有板子,或者板子某些硬件坏掉了(大多数情况下是根本没板子,板子太贵),这时我们还想继续学习linux下驱动开发或者Linux内核的移植该怎么办?这时可以采用 qemu 模拟出来一个ARM开发板,同时启动Linux内核。
Linux 内核要想启动,必须存在三件套,根文件系统、内核镜像、u-boot。由于 qemu 启动Linux内核不需要 u-boot 来引导,因此,u-boot可以不需要。
在终端中输入 sudo apt-get install qemu安装,安装完成后,输入 qemu-system-arm -M help 来查看 qemu 支持的 ARM 内核开发板,如下:
我们选择 vexpress-a9 这个板子。
在终端中输入 sudo wget https://cdn.kernel.org/pub/linux/kernel/v4.x/linux-4.1.15.tar.xz,这里下载 4.1.15 这个版本的 Linux 内核,输入 tar -vxf linux-4.1.15.tar.xz解压,如下:
在源码根目录下使用 vim Makefile修改顶层 Makefile,这里指定处理器架构交叉编译工具,这么做的目的时防止每次使用 make 命令都添加处理器架构与交叉编译器,如下:
保存退出后,输入make vexpress_defconfig 命令,产生.config 配置文件,.config 配置文件的作用下期在讲,不求甚解的学习方式是有必要的,所有的东西刚开始学习就要掌握其底层原理是很累人的,不妨用起来之后,在细细探究,如下:
产生配置文件之后,输入 make -j2编译内核,编译完成之后,会在 arch/arm/boot生成 Linux 内核镜像,同时在 arch/arm/boot/dts 下生成设备树文件,如下:
至此,Linux源码编译产物准备完毕
打开终端,输入命令 wget https://busybox.net/downloads/busybox-1.30.1.tar.bz2,下载后使用 tar xvf busybox-1.30.1.tar.bz2 解压,进入文件根路径,同样修改顶层 Makefile,指定编译工具与 CPU 架构,如下:

输入 make menuconfig 命令,配置 busybox,这里不使用静态库的方式编译busybox,使用动态的方式编译,然后手动将交叉编译器库文件拷贝至根文件系统,切记不要勾选,然后退出让改动生效,如下:
输入make开始编译,编译完成后输入 make install CONFIG_PREFIX=/home/tzy/qemu/rootfs ,注意此路径需提前创建,然后进入该目录查看,会有如下文件出现(你的文件可能没这么多,多出的这些需要后期加上):
拷贝交叉编译工具库文件至跟文件系统中的lib文件夹下,库文件在安装的交叉编译工具文件夹下,拷贝完成后如下:
至此,跟文件系统构建完毕,但是如何跑呢?在实际板子中需要将根文件系统保存到 flash 中去或者通过nfs的方式挂载网络文件系统供linux内核启动时访问,而qemu中没有板子,更没有flash,因此,需要虚拟出一个存储介质。
在终端中输入 dd if=/dev/zero of=rootfs.ext3.img bs=1M count=512,就叫这块存储介质为 nor flash 吧,该 flash 大小设置为512M,然后将这块 flash 挂载到 /mnt/rootfs 目录下,然后将构建的跟文件系统拷贝到此挂载点下,输入命令cp -r /home/tzy/qemu/rootfs /mnt/rootfs,最后卸载此flash。这一步骤其实就是将sd卡插入读卡器,然后插到电脑上,然后向这个sd卡中复制些文件,然后拔出读卡器,这样你的sd卡中就存在了构建的根文件系统了,如下:

最后使用如下命令启动内核:qemu-system-arm -M vexpress-a9 -m 512M -dtb /home/tzy/qemu_linux/linux-4.1.15/arch/arm/boot/dts/vexpress-v2p-ca9.dtb -kernel /home/tzy/qemu_linux/linux-4.1.15/arch/arm/boot/zImage -nographic -append "root=/dev/mmcblk0 rw console=ttyAMA0" -sd /home/tzy/qemu_linux/sd/rootfs.ext3,成功启动以后,如下图所示:
vim hello.c,打开vim编辑器编写代码,如下:
arm-linux-gnueabihf-gcc hello.c -o hello,这样就生成了ARM架构的可执行文件,输入file hello 命令查看文件信息,如下:

我正在玩HTML5视频并且在ERB中有以下片段:mp4视频从在我的开发环境中运行的服务器很好地流式传输到chrome。然而firefox显示带有海报图像的视频播放器,但带有一个大X。问题似乎是mongrel不确定ogv扩展的mime类型,并且只返回text/plain,如curl所示:$curl-Ihttp://0.0.0.0:3000/pr6.ogvHTTP/1.1200OKConnection:closeDate:Mon,19Apr201012:33:50GMTLast-Modified:Sun,18Apr201012:46:07GMTContent-Type:text/plain
之前在培训新生的时候,windows环境下配置opencv环境一直教的都是网上主流的vsstudio配置属性表,但是这个似乎对新生来说难度略高(虽然个人觉得完全是他们自己的问题),加之暑假之后对cmake实在是爱不释手,且这样配置确实十分简单(其实都不需要配置),故斗胆妄言vscode下配置CV之法。其实极为简单,图比较多所以很长。如果你看此文还配不好,你应该思考一下是不是自己的问题。闲话少说,直接开始。0.CMkae简介有的人到大二了都不知道cmake是什么,我不说是谁。CMake是一个开源免费并且跨平台的构建工具,可以用简单的语句来描述所有平台的编译过程。它能够根据当前所在平台输出对应的m
我试图在rails中了解rubygems是如何变得可以自动使用的,而不是在使用required的文件中gem? 最佳答案 这是通过bundler/setup完成的:http://bundler.io/v1.3/bundler_setup.html.它在您的config/boot.rb文件中是必需的。简而言之,它首先将环境变量设置为指向您的Gemfile:ENV['BUNDLE_GEMFILE']||=File.expand_path('../../Gemfile',__FILE__)然后它通过要求bundler/setup将所有ge
从一开始,我就是一个Windows高手。我从MS-DOS开始。我安装了Windows2.1以及此后的所有Windows。现在,我家里有10台不同的Windows机器在运行,从Windows7Ultimate到各种版本的WindowsServer。我还没有完成Windows8,也不想去那里。我在服务器和各种软件方面都有UNIX经验,但它并不是我的首选环境。但是,我想我正在转换。我试图假装使用Cygwin和MSYS在Windows下运行UNIX。我的目的是搭建一个开发环境。两者都让我失望了。我花了比开发更多的时间来解决一系列技术问题。这是NotAcceptable。到目前为止,我的Ruby
如果特定语言环境中缺少翻译,如何配置i18n以使用en语言环境翻译?当前已插入翻译缺失消息。我正在使用RoR3.1。 最佳答案 找到相似的question这里是答案:#application.rb#railswillfallbacktoconfig.i18n.default_localetranslationconfig.i18n.fallbacks=true#railswillfallbacktoen,nomatterwhatissetasconfig.i18n.default_localeconfig.i18n.fallback
我给自己买了一个新的8gigUSBkey,我正在寻找一个合适的解决方案来拥有一个可移植RoR环境来学习。我在谷歌上搜索了一下,发现了一些可能性,但我很想听听一些现实生活中的经历和意见。谢谢! 最佳答案 我喜欢InstantRails,非常容易使用,无需安装程序,也不会修改您的系统环境。 关于ruby-on-rails-可移植RubyonRails环境,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/q
在我的双语Rails4应用程序中,我有一个像这样的LocalesController:classLocalesController用户可以通过此表单更改其语言环境:deflocale_switcherform_tagurl_for(:controller=>'locales',:action=>'change_locale'),:method=>'get',:id=>'locale_switcher'doselect_tag'set_locale',options_for_select(LANGUAGES,I18n.locale.to_s)end这有效。但是,目前用户无法通过URL更改
我在跑Fastlane(适用于iOS的持续构建工具)以执行用于解密文件的自定义shell脚本。这是命令。sh"./decrypt.shENV['ENCRYPTION_P12']"我想不出将环境变量传递给该脚本的方法。显然,如果我将密码硬编码到脚本中,它就可以正常工作。sh"./decrypt.shmypwd"有什么建议吗? 最佳答案 从直接Shell中扩展假设这里的sh是一个faSTLane命令,它以给定的参数作为脚本文本调用shell命令:#asafastlanedirectivesh'./decrypt.sh"$ENCRYPTI
文章目录1.自动驾驶实战:基于Paddle3D的点云障碍物检测1.1环境信息1.2准备点云数据1.3安装Paddle3D1.4模型训练1.5模型评估1.6模型导出1.7模型部署效果附录show_lidar_pred_on_image.py1.自动驾驶实战:基于Paddle3D的点云障碍物检测项目地址——自动驾驶实战:基于Paddle3D的点云障碍物检测课程地址——自动驾驶感知系统揭秘1.1环境信息硬件信息CPU:2核AI加速卡:v100总显存:16GB总内存:16GB总硬盘:100GB环境配置Python:3.7.4框架信息框架版本:PaddlePaddle2.4.0(项目默认框架版本为2.3
我有一个应用程序专门使用Facebook作为身份验证提供程序,并正确设置了生产模式的回调。为了让它工作,您需要为您的Facebook应用程序提供一个站点URL和一个用于回调的站点域,在我的例子中是http://appname.heroku.com和appname。heroku.com分别。问题是我的Controller设置为只允许经过身份验证的session,所以我无法在开发模式下查看我的应用程序,因为Facebook应用程序的域显然没有设置为本地主机。如何在不更改Facebook设置的情况下解决这个问题? 最佳答案 创建另一个域l