新同学Quick Start

📌 文档为较早期创建, 近期入职各职能方向新同学请酌情参考~

该文档用于帮助新同学快速熟悉日常办公和正式进入工作的前期准备工作。

一、资产申请&办公软件

公司为研发岗同学准备了台式机、显示器、外加内存条和固态硬盘用于升级以及插线板等。

电脑升级&系统安装:

领取IT资产后,通常配置的是台式机预装Window系统,在进入开发阶段台式机作为开发机器,大家统一使用Ubuntu系统Ubuntu 18.04或者 20.04,拿到电脑后可联系IT同学升级安装电脑硬件(硬盘建议装1T+固态+4T机械硬盘,内存条一定要全部装上, 默认领取的电脑及配件不一定是这个配置,加装固态硬盘需要额外申请固定资产—飞书操作)和安装Ubuntu系统,大多数同学安装的系统版本为18.04和20.04。

其他资产申请:

研发同学可以在小米办公 http://mioffice.cn/ 应用中心-固定资产申请领取用笔记本(红米)

电脑用于日常会议、面试、外出沟通等。

在笔记本没有拿到之前,大家可以在台式机上通过网页版 小米办公 进行内部沟通或是安装手机版App。可前往下载中心下载 小米人 以及 小米办公App。

小米Pad5 Pro申请:

途径一: 研发同学可以在小米办公 http://mioffice.cn/ 应用中心-固定资产申请领取用小米Pad5 Pro用于研发调试,申请完等待审批,审批成功之后去A栋3楼领取。

VPN 安装使用

参考 VPN-用户指南-PC版本

远程办公—SSH

远程办公—SSH登录

二、开发环境准备

2.1、Git 安装 &配置

  • 可通过apt-get 命令进行快速安装 sudo apt-get install git
  • git配置
    • git config —global user.name “your_account”
    • git config —global user.email “your_account@xiaomi.com
    • git config others…
  • 配置完可以使用git config —list 查看是否配置正确

2.2、其他依赖工具安装

  • 正常情况下安装如下工具就可以的。如果编译源码出现错误,可以在out/error.log或者命令窗口查看错误日志,看是否要额外安装其它的工具(个例案件: 需要额外安装 sudo apt-get install lib32ncurses libncurses5 和 sudo apt-get install libxml-simple-perl)。
sudo apt-get install git-core gnupg flex bison gperf build-essential \
 zip curl zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386 \
 lib32ncurses5-dev x11proto-core-dev libx11-dev lib32z-dev ccache \
 libgl1-mesa-dev libxml2-utils xsltproc unzip m4 libssl-dev

2.3、Gerrit配置

  • Gerrit 面的SSH-KEY部分。ssh-keygen
    • 地址1: http://gerrit.auto.mioffice.cn/dashboard/self
    • 地址2: http://gerrit.pt.mioffice.cn/dashboard/self
    • 用户名配置(Gerrit username)下载第一次登录需要配置用户名,建议和自己邮箱账号一致,如laowang12,后续同步代码会用到该用户名,否则可能会遇到代码无法同步的问题,下边的 代码同步 章节有提到。
    • 配置 ssh key 使用ssh-keygen 生成key,然后在将生成的id_rsa.pub内容粘贴到Gerrit个人主页Setting页
ssh-keygen -t rsa -C "your_email_account@xiaomi.com"

📌 Window环境生成sshkey请使用ed25519算法生成key, ssh-keygen -t ed25519 -C “your_email”。否则可能会出现Window上无法使用repo同步代码等情况。

确认key存放文件目录,可以直接使用默认路径,Enter确认后要求输入密码,可以直接Enter不设置密码,然后可以在用户主目录下~/.ssh/下看到生成的id_rsa 以及id_rsa.pub key文件,然后将id_rsa.pub内容添加到Gerrit系统Setting部分的SSH-KEY部分即可。

  • **注意: 如果在后续工程编译遇到publicKey相关问题(如下所示),请按如下方法尝试(强烈建议一次配置到位再编译):找自己的leader 申请加入这个car-sc-rd@xiaomi.com邮件组(加完后2个小时左右之后再编译代码,不加的话编译的时候会报key权限错)。**将http://gerrit.auto.mioffice.cn/settings/#SSHKeys 以及http://gerrit.pt.mioffice.cn/settings/#SSHKeys 两个Gerrit平台上的SSH key均配置为当前电脑上生成的同一个key,再进行尝试。 配置完后同步生效有延迟,如再次编译失败请隔天尝试。

详细步骤可参考:Git&Gerrit使用简介

2.4、代码同步

座舱主机代码会基于MIUI(目前选定小米 pad5 pro 5G版本)进行定制、适配,初期需要对基线版本代码进行熟悉,整个代码仓库创建、同步以及编译等操作亦可参考该篇文档:座舱开发环境

由于目前维护仓库有迁移表更,代码下载和编译请参考座舱开发环境一文,该章节2.4.1后续小节仅供参考,实操请参考 座舱开发环境

2.4.1、repo 工具下载

# 方案1、repo 存放到系统目录/bin下, /bin 默认已添加到系统环境变量
sudo curl https://mirrors.tuna.tsinghua.edu.cn/git/git-repo -o /bin/repo
sudo chmod a+x /bin/repo
 
# 方案2、可自行选择目录存放repo,比如~/bin, 请自行将repo所在目录添加到系统环境变量
mkdir ~/bin
curl https://mirrors.tuna.tsinghua.edu.cn/git/git-repo -o ~/bin/repo
chmod a+x ~/bin/repo
export PATH=~/bin:$PATH

2.4.2、repo init

根据各自研发方向选择bsp版本或者miui版本初始化repo以及后续代码同步。

**!**尽量选择大空间磁盘分区创建repo同步代码。在使用repo init命令时, $GERRIT_USERNAME部分是你在Gerrit上注册的username, 非邮箱账户(建议和邮箱账户保持一致)。然后cd到指定的目录然后执行repo init命令即可完成repo的初始化。

#原生版本(可提交代码,建议下载此分支)
repo init -u ssh://[$GERRIT_USERNAME]@gerrit.auto.mioffice.cn:29418/platform/manifest.git -b alphatrion -m bsp-a3.xml --repo-url=https://mirrors.tuna.tsinghua.edu.cn/git/git-repo
 
#MIUI稳定版本(可提交代码)
repo init -u ssh://[$GERRIT_USERNAME]@gerrit.auto.mioffice.cn:29418/platform/manifest.git -b alphatrion -m miui12.5-a3.xml --repo-url=https://mirrors.tuna.tsinghua.edu.cn/git/git-repo

2.4.3、repo sync 同步代码

repo sync -j**N**为指定下载代码的线程数量。如指定16-32个线程,

repo sync -j16 -c --no-tags

2.5、代码编译

2.5.1、设置环境

source build/envsetup.sh 用来将envsetup.sh里的所有用到的命令加载到环境变量里去。

2.5.2、设置目标

lunch enuma-userdebug,enuma为product name, 小米平板5 pro 5G的product name为enuma。

2.5.3、编译构建

build.sh dist -j16

2.5.4、编译单个模块(APP)

  • make: make ModuleName, 如make CarSettings
  • ninja: ninja ModuleName (如果无新增文件,使用ninja非首次编译速度更快)
  • mmm/mma:mmm不会编译依赖的内容,mma会将依赖的内容一同编译。

2.6、代码修改上传

git add .
git commit -s //进入提交日志编辑页面,编辑保存后退出
repo upload .  //执行upload操作将代码提交到Gerrit以便进行审核
 
//避免一次review有多笔提交 可以使用 commit --amend将最新的改动合并到上一笔的提交
git commit --amend
  • 多笔提交合并 git rebase -i HEADn 使用git rebase -i HEADn合并多笔提交。

2.7 、遇到问题

2.7.1、无法初始化repo

  • 请检查Gerrit系统username是否和命令行中使用的一致。
  • 代码获取同步、权限类问题亦可联系 @Jia Bi 毕嘉 老师咨询解决

2.7.2、代码同步问题

export GIT_SSL_NO_VERIFY=1
# 或
git config --global http.sslVerify false

三、分支

请参考 座舱开发环境

四、设备解锁&刷机

本地AOSP代码编译出来的img刷机的步骤:

1、刷System
sudo apt install adb
sudo apt install fastboot
adb reboot fastboot
fastboot -w
fastboot flash system system.img
fastboot flash vbmeta --disable-verification vbmeta.img
fastboot set_active a
fastboot reboot
 
2、刷so/app/jar
adb root
adb disable-verity
adb reboot
adb root
adb remount
adb push out/sytem/xxx/xxx.apk  /system/xx/xxx.apk
adb reboot 重启后生效

如果是刚走线上设备申请采购的方式拿到的平板设备,需要先对设备进行解锁操作,公司提供了在线解锁的工具:https://tools.bsp.xiaomi.com/unlock(仅用它来解锁)。

在刷机之前需要先确认设备型号(代号)方式:通过 adb shell getprop | grep device 命令查看设备型号。

目前座舱车机系统的DailyBuild版本获取地址为:https://cloud.mioffice.cn/#/product/file-store/objects/test-ci-package?regionId=cl1yo3fdj00000op5xhjta4xy

五、 其他系统类问题

提升系统用户权限至root group

修改/etc/sudoers文件实现。

adb devices no permissions

hanguoliang@hanguoliang:~$ adb devices
List of devices attached
fejbts7tzla6mjk7        no permissions (missing udev rules? user is in the plugdev group)

ubuntu链接蓝牙键盘

sudo -i
bluetoothctl
[bluetooth]# power off
[bluetooth]# power on
[bluetooth]# scan on
[bluetooth]# connect XX:XX:XX:XX:XX:XX

六、工具推荐

七、其他参考文档

座舱开发环境 Framework代码获取、编译

未完待续,持续补充…