1 安装homebrew

homebrew是mac平台下的一个包管理软件系统,类似于ubuntu的apt。可以通过命令安装很多现成的二进制包。安装brew需要从github下载一些资源,但是一般国内的网络速度太慢,很难安装成功,我们可以更换为国内源进行安装以加快安装速度。

homebrew清华软件源地址 https://mirrors.tuna.tsinghua.edu.cn/help/homebrew/

安装过程通过在终端中输入命令完成,打开终端,按照如下步骤安装:

  • 在命令行输入 xcode-select --install安装Command Line Tools for Xcode

安装完成后,在终端继续输入下面的命令设置环境变量:

export HOMEBREW_BREW_GIT_REMOTE="https://mirrors.tuna.tsinghua.edu.cn/git/homebrew/brew.git"
export HOMEBREW_CORE_GIT_REMOTE="https://mirrors.tuna.tsinghua.edu.cn/git/homebrew/homebrew-core.git"
export HOMEBREW_BOTTLE_DOMAIN="https://mirrors.tuna.tsinghua.edu.cn/homebrew-bottles"

输入下面的命令下载和安装homebrew:

# 下载安装脚本到brew-install目录
git clone --depth=1 https://mirrors.tuna.tsinghua.edu.cn/git/homebrew/install.git brew-install
# 执行安装脚本
/bin/bash brew-install/install.sh
# 安装完成之后 可以删除刚才下载的安装脚本
rm -rf brew-install

安装完成之后,还需要在终端手动执行一些配置命令:

# 把brew加入到系统路径
echo 'eval "$(/opt/homebrew/bin/brew shellenv)"' >> /Users/jihongbin/.zprofile
eval "$(/opt/homebrew/bin/brew shellenv)"
# 修改默认软件源
echo 'export HOMEBREW_BREW_GIT_REMOTE="https://mirrors.tuna.tsinghua.edu.cn/git/homebrew/brew.git"' >> /Users/jihongbin/.zprofile
echo 'export HOMEBREW_CORE_GIT_REMOTE="https://mirrors.tuna.tsinghua.edu.cn/git/homebrew/homebrew-core.git"' >> /Users/jihongbin/.zprofile
export HOMEBREW_BREW_GIT_REMOTE="https://mirrors.tuna.tsinghua.edu.cn/git/homebrew/brew.git"
export HOMEBREW_CORE_GIT_REMOTE="https://mirrors.tuna.tsinghua.edu.cn/git/homebrew/homebrew-core.git"

完成全部安装之后,可以通过brew help查看帮助命令

Example usage:
brew search TEXT|/REGEX/
brew info [FORMULA|CASK...]
brew install FORMULA|CASK...
brew update
brew upgrade [FORMULA|CASK...]
brew uninstall FORMULA|CASK...
brew list [FORMULA|CASK...]
​
Troubleshooting:
brew config
brew doctor
brew install --verbose --debug FORMULA|CASK
​
Contributing:
brew create URL [--no-fetch]
brew edit [FORMULA|CASK...]
​
Further help:
brew commands
brew help [COMMAND]
man brew
https://docs.brew.sh

之后可以通过brew install xxx来安装相关的软件包

2 配置终端

如果是进行一些程序开发的工作,很大程度会使用到终端,可以通过修改一些配置来美化终端的界面

大部分都是使用 oh my zhs + iterm2 的组合,oh-my-zsh是 zsh 的一个插件,可以基于zsh提供一些修改和功能,iterm2是一个第三方的终端,应该也是提供了不少新的功能,但是以我目前的使用需求来看,原生的终端也是可以满足当前的需求的,所以暂时就基于原生终端去做一些配置。

原生的终端也带了一些列的主题,我选择了一个带有一些透明度的主题(Silver Aerogel),看起来还可以,就暂时使用这个了,默认的字体太小了,虽然视力还可以,但是看起来太难受,修改了一下字体的大小。

一般在ubuntu的话我会修改系统的字体,但是现在在mac下默认字体也还行,就不修改了。

3 安装docker 编译linux内核

我安装docker是因为要做一些嵌入式开发的工作,大家知道现在apple m1芯片已经是arm64架构的芯片,正好我也在进行一些arm64架构平台的软件开发工作,本来以为使用mac自带的clang工具链也可以进行一些基本的开发,但是发现苹果自己的工具链是使用mach-o的可执行文件格式,而不是我们很常见的elf。

总结一下就是:

  • windows平台使用exe
  • linux平台使用elf
  • mac平台使用mach-o

所以mac自带的工具链和我们平时嵌入式开发使用的还是有一些不兼容,很难在原生平台进行开发,所以此时需要通过虚拟机去创建一个linux的开发环境进行开发。比较常用的linux系统就是ubuntu了,不过由于M1芯片是arm64架构,所以目前创建的虚拟机也将会使用atm64版本 与我们之前接触到的ubuntu可能略有不同,但是对于我来说,还是比较合适的。

docker是一个很出名的容器,具体是什么东西还不是很清楚,最近几天的接触 又有了一些了解。

首先docker是和linux有很大的关联或者关系,我们启动的各种docker都是以一个linux系统作为基地,进而添加了各种lib、各种软件包构成的。docker可以通过一个叫做 dockerfile的文件描述一个docker镜像,我们可以基于该文件去创建一个容器。

目前在M1芯片上,docker也是采用了套娃技术来支持。docker m1版本是基于qemu- system-aarch64 去运行的,通过qemu仿真器去执行一个arm64的Linux环境,来执行docker的软件,然后在docker里面再去运行linux系统。不过根据我的尝试,编译等效率还是可以的。

所以我们这里就是使用docker作为一个linux虚拟机来使用,完成一些编译工作。

docker安装比较简单,到官网选择对应的版本下载即可,我们主要介绍一下在mac m1芯片平台基于docker + ubuntu进行linux内核的编译。

3.1 构建一个docker镜像

首先创建一个docker镜像描述文件 Dockerfile:

FROM ubuntu:21.10 as build
​
ENV DEBIAN_FRONTEND=noninteractive
​
RUN echo "" > /etc/apt/sources.list
RUN echo "deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ impish main restricted universe multiverse" >> /etc/apt/sources.list
RUN echo "deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ impish-updates main restricted universe multiverse" >> /etc/apt/sources.list
RUN echo "deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ impish-backports main restricted universe multiverse" >> /etc/apt/sources.list
RUN echo "deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ impish-security main restricted universe multiverse" >> /etc/apt/sources.list
​
RUN apt-get update
RUN apt-get install -y gcc make flex bison libssl-dev bc vim qemu-system-aarch64
RUN rm -rf /var/lib/apt/lists/*
​
WORKDIR /root
​
CMD tail -f /dev/null

上述的文件描述,将会在基于ubuntu 21.10 版本去构建一个可以编译linux内核的软件环境,主要做了下面几项工作:

  • 修改了ubuntu的软件源 加速apt安装速度
  • 安装一些必要的软件包

执行build命令,基于上面的描述文件创建镜像:

docker build --tag ubuntu -f ./Dockerfile .

创建完成之后,可以通过docker image ls查看本地的镜像

接下来基于该去运行一个docker容器:

docker run --device /dev/fuse --cap-add SYS_ADMIN --name ubuntu -it ubuntu bash

在docker与宿主机之间拷贝文件:

docker cp path/file ubuntu:path/file

退出docker之后恢复:

docker start ubuntu
docker attach ubuntu

编译一个linux内核用时,虽然是在虚拟机下面 但是这个性能还是十分强大。

​
real5m4.928s
user16m31.139s
sys2m39.652s
root@ad1f59b2dd09:~/linux-5.16#