Mac OSX下VirtualBox直接使用物理硬盘作虚拟机磁盘

目前 VirtualBox只能用命令行来建立磁盘才可以使用物理硬盘。

如果是USB磁盘的话,那么需要从"关于本机"->"概览"->"系统报告"->"USB"中找到磁盘的名字,比如"disk2".

我们假定 VirtualBox安装在"
/Applications/VirtualBox.app/"这个目录下面,要在" ~/VirtualBox\ VMs/Ubuntu/"目录下面生成文件,则执行如下命令:

/dev/disk2表示机器上的第二块硬盘,每次插入新磁盘后,就会出现类似 /dev/disk*的一个路径名。

最后,新建一个虚拟机,然后指定使用刚刚创建的磁盘即可。

参考链接


How do I install Mavericks onto external HD but from inside VirtualBox

macOS Sierra支持NTFS/EXT4文件系统

1.安装 HomeBrew

按照 让Mac也能拥有apt-get类似的功能——Brew 的介绍配置安装 HomeBrew

2.安装 osxfuseext4fusentfs-3g

卸载命令为:

3.挂载磁盘设备

如果是USB磁盘的话,那么需要从"关于本机"->"概览"->"系统报告"->"USB"中找到磁盘的名字,比如"disk2".
如果已知是"EXT4"磁盘格式的话,则使用如下命令:

参考链接


Mac El Capitan上的latex、NTFS硬盘等的一些东西(不一定靠谱)

Mac OSX EI Capitan(10.11.5)上使用crosstool-ng 1.22.0 建立树莓派2B的编译环境

背景介绍


树莓派自带的编译工具是基于 Linux的,在 Mac OSX上是无法正常使用的,因此比较简单的方法就是使用 crosstool-ng来建立交叉编译环境。

配置编译环境


1.安装 HomeBrew,方便各种工具的安装

参考让Mac也能拥有apt-get类似的功能——Brew

2.使用 HomeBrew安装 crosstool-ng

3.链接 Mac OSX上的 installginstallMac OSX上没有 ginstall

如果不执行命令,则会报错

4.使用 HomeBrew安装 expat

不执行此命令,我的电脑会出现 crosstool-ng在配置 expat的时候失败,但是两者使用的版本并不相同,另外貌似出错后,重试即可,不需要安装 expat,但是稳妥起见,还是安装好了。
5.创建大小写区分的磁盘分区文件,并挂载(如果你系统创建的时候,系统分区以及区分大小写,则不必此项操作)

参考Mac OSX下执行crosstool-ng提示“Your file system ‘xxxx’  is *not* case-sensitive!”

6.在刚刚创建并挂载的大小写区分的磁盘上执行配置命令

7.修改刚刚命令生成在当前目录下的配置文件

找到

禁止使用静态链接( Mac OSX下,无法提供对于 libc的静态链接,只能动态链接)

8.执行构建命令

构建中遇到的问题


如果构建出错,可以使用

后面的数字代表几个并行的任务,单个任务可以更方便的查看出错的信息,多任务并发会导致日志打印的非常混乱。

在构建( ct-ng build)的时候遇到任何问题,都应该查看当前构建目录下的 build.log文件,这个文件中详细记录了构建的过程信息,详细的出错信息等。
由于 crosstool-ng在构建过程中需要去服务器上下载源代码,难免出现文件下载不完整的情况,这种情况下,可以从 build.log文件中看到如下的内容:

则说明下载的源代码出现了问题。最容易出现这个问题的是 gcc.以 gcc-5.2.0为例子,修正的方法如下:

简单解释一下代码, tarballs存储了从服务器上下载的全部源代码的压缩包,解压缩出现问题,因此必须删除,让 crosstool-ng去重新下载,扩展名为 .extracting文件为 crosstool-ng的标记文件,用来标识这个包是不是已经被解压缩过,一旦这个文件存在 crosstool-ng就认为对应的工具已经就绪了,就不会处理这个工具了,最后删除的是工具源代码的目录。

如果提示安装 binutils的时候失败,如下所示:

查看 build.log可以看到如下的内容:

这个BUG的原因是由于 GCC的版本问题导致的,低于4.7版本的 GCC无法理解这个语法,尽管 Mac Osx已经使用最新的 LLVM,但是遗憾的是,最新的 LLVM并没有支持这个语法。解决方法如下:

找到如下代码

修改为:

如果出现了" fatal error: bracket nesting level exceeded maximum of 256",如下所示:

则修改方法如下:

在出现的界面中选择" Paths and misc options"项目
Crosstool-NG-PathAndMiscOptions

在第二级界面中不断下拉,找到" Extra host compiler flags",增加" -fbracket-depth=512",这个选项。

Crosstool-NG-PathAndMiscOptions-ExtraHostCompilerFlags

然后重新执行

如果出现错误:

这个是由于 LLVM目前的版本还无法正确的理解部分 GCC的汇编部分的写法,导致编译失败,而这部分的语法一般都是用在优化的时候出现错误,因此我们需要禁用这部分的优化,使用" Paths and misc options"->" Extra host compiler flags"增加 " -fno-unroll-loops"。如下图:
Crosstool-NG-PathAndMiscOptions-ExtraHostCompilerFlags-NoUnrollloops
如果出现如下错误:

这个问题是由于编译的时候,同时打开的文件数量超过了 256导致的,修复方式为在 shell中增大同时打开的文件数量限制到 1024

然后在同一个 shell中继续执行

如果出现如下错误,则直接忽略即可:

至于其他问题,貌似重试一下就可以解决了。

编译树莓派源代码


Ubuntu 16.04 (x64)树莓派B+(Raspberry Pi  B+)源代码编译

参考链接


Mac OSX下执行crosstool-ng提示“Your file system ‘xxxx’ is *not* case-sensitive!”

Mac下面使用 HomeBrew安装了 crosstool-ng来编译树莓派的代码,结果在执行的时候报告如下错误:

比较简单的解决方法就是创建一个支持大小写区分的文件,作为一个分区挂载,然后把代码拷贝到这个分区中执行编译。

1.创建分区文件

2.挂载分区

早期版本的 Mac OS X

对于 OS X EI Capitan(10.11.5)版本而言,生成的文件名变成了 raspberry.dmg.sparseimage因此需要使用这个文件来挂载

挂载后会在桌面生成一个名为 Raspberry的磁盘文件夹生成,直接操作这个目录即可。

3.修改 crosstool-ng的编译工具下载目录

如下图的方式进行操作:

1.选择" Paths and misc options",并选中" Select"之后点击回车按键
Crosstool-NG-PathAndMiscOptions

2.点击向下的方向按键,,找到" (${Home}/src) Local tarballs directory",这个项,并选中" Select"之后点击回车按键,修改为" /Volumes/raspberry/src",然后继续向下,找到" (${Home}/x-tools/${CT_TARGET}) Prefix directory",这个项,并选中" Select"之后点击回车按键,修改为" /Volumes/raspberry/x-tools/${CT_TARGET}"
Crosstool-NG-PathAndMiscDirectory
Crosstool-NG-PathAndMiscOptionsPrefixDirectoryVolumesraspberry

修改后的结果如下图:

Crosstool-NG-PathAndMiscDirectoryChange
完成操作后,不断快速按下 Esc按键,在最后弹出的确认保存窗口中选择保存即可,如下图:

Crosstool-NG-Configure-Save

4.卸载分区

升级到OS X Yosemite后 Android Studio启动崩溃 Symbol not found: _CGContextSetAllowsAcceleration

Mac OS 升到Yosemite后, 打开 Android Studio报

解决方法,是重新安装Apple的Java支持:
Apple官网下载或者本站下载

mac上通过brew安装opencv

在Mac OSX上如果想使用OpenCV,可以通过自己手动编译源码的方式,但比较繁琐。

推荐使用Homebrew来进行安装,步骤很简单,如下:

等待几分钟,即可安装成功。

Mac SSD TRIM的终极方案

该方法在 Mac 10.9.1 版本上面有效。

Enable SSD TRIM for Mac, Ultimate Solution. TRIM终极方案 我的Mac机型是Mac mini Late 2012,把硬盘换成了SSD。试了多种打开SSD TRIM的教程,总不能成功,有一次还弄到系统无法启动。今天大盘开始盘整了,于是可以静下心来把那些教程仔细debug一遍,发现了问题所在,成功开启了SSD TRIM。

最重要的先讲:在做这个工作之前,用Time Machine备份机器。

其次是怎么会弄到系统无法启动?原因是在改写IOAHCIBlockStorage这个文件的时候,把权限破坏了。一旦权限不对,系统会显示警告窗口,说无法加载IOAHCIBlockStorage。千万不要忽视这个警告,去重启机器,而是应该先修复权限。最简单最彻底的办法就是使用Disk Utility,选择系统盘,然后Repare Disk Permissions.

为什么有些教程会不起作用呢?这是因为不同的系统版本,如10.8.1、10.8.2,加上不同的机型,特别是新机型,系统文件有可能是不一样的。
如果教程不起作用,那就要先理解这些开启SSD TRIM办法的实质:其实就是把IOAHCIBlockStorage文件中硬盘型号的字符“APPLE SSD”这九个字节抹去,替换成全零字节。但是在整个文件中做全替换也不行,只能替换含义为硬盘型号字符的字节。
就因为各种系统和机型的文件不同,同时又要选择性地做替换,于是出现了不同的教程。这里介绍的终极方案,就是先查看你机器上的IOAHCIBlockStorage文件,然后修改教程中的一条命令,然后再执行那些命令。

ugmbbc_001734902074378

用一个二进制编辑器(比如说“Hex Fiend”)打开

搜索十六进制“52 6F 74 61 74 69 6F 6E 61 6C 00”,也就是“Rotational”字串加上0结尾。整个文件我就只搜到一个匹配的。查看后面是不是9个字符的“APPLE SSD”,如果是的话,就看“APPLE SSD”接下来的字符是什么。图中是“Time To Ready”,记下这个字串的第一个字符,是“T”,他的十六进制是54。

接下来就修改那些教程中的命令,请看https://gist.github.com/3334193,点击“Download Gist”下载文件,然后双击打开,就会自动解压缩。修改文件enable_trim.sh中的(x00{1,20}x51)中的51为上文的54,修改完就是(x00{1,20}x54),保存文件。解压的这个enable_trim.sh文件是没有执行权限的,那就在控制台运行“chmod 755 enable_trim.sh”,赋予执行权限。

注意,对于由于某墙封锁导致的不能访问github 问题,可以直接复制如下代码来自己生成sh文件

在运行“./enable_trim.sh”之前,一定要保证你现在的

文件一定是未经修改的原系统文件。执行完毕后,系统如果没有弹出什么提示框,那就万事大吉了。有兴趣的话,你还可以用Hex Fiend查看一下修改后的文件,和原文件相比,有啥不同。

ugmbbc_0016571229804857
手工重启机器后,应该就是成功了。
ugmbbc_0017201152901000

参考连接 http://www.cnbeta.com/articles/219752.htm

Mac Gradle 编译报告Failure initializing default system SSL context

Mac 10.9 版本下使用Gradle 编译 Android 项目,报告错误

使用 -debug 参数,得到的详细输出如下

可以看到,异常信息为

到具体的目录下面去看,这个文件果然是不存在的,有些版本链接到了一个不存在的目录,这种情况一般是经历过系统升级,往往会造成这个现象,另外,就是系统安装的Java 是Apple 提供的 Java 版本,而不是 Orcale 官网下载的独立版本。

解决方法是可以到Orcale 官网下载最新版本的 Java ,安装替换即可解决问题。

使用 Homebrew 安装指定版本的软件

在命令行下使用

就可以安装 FORMULANAME 对应的工具,它会处理好依赖关系,非常方便。默认情况下,安装最新版本。但是现在在使用 Gradle 的时候,最新版本的 Gradle 是1.10,但是编译Android 的项目失败,只能降级成 1.9 版本的才行,解决方法如下

1.查看 brew 支持哪些版本的 gradle

可以看到,支持 1.9 版本的。

2. 进入 brew 所在的git仓库

3.复制粘贴刚才  brew versions gradle 命令的提示,我们需要1.9 版本的,因此执行

此时,本地仓库中的gradle 就被替换成了 1.9 的链接地址信息。

4. 安装

可以看到输出的信息已经是 1.9 的版本了。

Java: Finding/Setting JDK/$JAVA_HOME on Mac OS X

As long as I’ve been using a Mac I always understood that if you needed to set $JAVA_HOME for any program.

On my machine this points to the 1.6 JDK:

This was a bit surprising to me since I’ve actually got Java 7 installed on the machine as well so I’d assumed the symlink would have been changed:

Andres and I were looking at something around this yesterday and wanted to set $JAVA_HOME to the location of the 1.7 JDK on the system if it had been installed.

We eventually came across the following article which explains that you can use the /usr/libexec/java_homecommand line tool to do this.

For example, if we want to find where the 1.7 JDK is we could run the following:

And if we want 1.6 the following does the trick:

We can also list all the JVMs installed on the machine: