明确设备
虽然mac中可以在homebrew中找到各种交叉编译器,但是嵌入式往往需要专用的交叉编译器,一般只有X86的编译器。因此无论在mac上直接使用还是使用mac端的虚拟机,本质上还是arm,无法使用X86的编译器。
设备扩展
Mac也有X86的,选择Mac mini
因此我的解决方案就是MacBook M1 + Mac mini X86 (microsoft remote desktop投屏到MacBook)这个方案只需要多加几百块就可以完美获得Windows+Linux+macOS开发环境。
设备扩展2.0(Windows用看这里!)
如果你恰好有一台服务器,那么将会拥有超级简单的开发环境,就是PC(或者Mac)直接本地SCP将文件发送到服务器。在服务器端设定某个文件夹下检测到这个发送的文件时,自动编译文件。然后再在本地SCP获取这个文件。虽然听起来好像也不方便,但是!!这些工作都可以交给脚本来做。
也就是说,在传统的开发环境下,
最快的情况:
- 打开终端1,SSH开发版,打开终端2
- 打开占用很多资源的虚拟机终端3(一段时间。。。。。。)
- Coding
- 使用Linux的终端3编译到共享文件夹
- 在终端2将共享文件夹的可执行文件SCP(或者TFTP、NFS)到开发版
- 在终端1执行文件
使用服务器:
- 打开终端1,SSH开发版,打开终端2
- Coding
- 在终端2输入alias好的命令
- 在终端1执行文件
如何搭建环境
服务器的搭建
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67
| sudo apt-get install inotify-tools
touch watch_and_compile.sh
WATCH_DIR="/root" FILE_NAME="1.c" COMPILED_FILE="1" FAILURE_FILE="2.c"
while true; do inotifywait -e create "$WATCH_DIR" | while read path action file; do if [ "$file" == "$FILE_NAME" ]; then echo "Detected $FILE_NAME"
sleep 1
echo "Contents of $FILE_NAME:" cat "$WATCH_DIR/$FILE_NAME"
echo "Compiling $FILE_NAME..." arm-linux-gcc "$WATCH_DIR/$FILE_NAME" -o "$WATCH_DIR/$COMPILED_FILE"
if [ $? -eq 0 ]; then echo "Compilation successful." rm "$WATCH_DIR/$FILE_NAME" else echo "Compilation failed." rm "$WATCH_DIR/$FILE_NAME" touch "$WATCH_DIR/$FAILURE_FILE" fi fi done done
chmod +x watch_and_compile.sh
sudo nano /etc/systemd/system/watch_and_compile.service
[Unit] Description=Watch and Compile Service After=network.target
[Service] ExecStart=/root/watch.sh Restart=always
[Install] WantedBy=multi-user.target
sudo systemctl daemon-reload sudo systemctl start watch_and_compile.service sudo systemctl enable watch_and_compile.service
sudo systemctl stop watch_and_compile.service
sudo systemctl disable watch_and_compile.service
|
本地Wind或Mac
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
| # 编写脚本,SCP上载和下载 vim transfer_and_get.sh
#!/bin/bash
# 配置变量 LOCAL_FILE="/Users/boweihao/Auto/1.c" REMOTE_USER="root" REMOTE_HOST="34.30.22.253" REMOTE_DIR="/root" REMOTE_FILE="$REMOTE_DIR/1" LOCAL_DEST_DIR="/Users/boweihao/Auto"
# 传输本地文件到服务器 echo "正在将文件传输到服务器..." scp -p "$LOCAL_FILE" "$REMOTE_USER@$REMOTE_HOST:$REMOTE_DIR" if [ $? -ne 0 ]; then echo "文件传输到服务器失败。" exit 1 fi echo "文件传输成功。"
# 等待2秒 sleep 2
# 获取服务器上的文件到本地 echo "正在获取服务器上的文件..." scp -p "$REMOTE_USER@$REMOTE_HOST:$REMOTE_FILE" "$LOCAL_DEST_DIR" if [ $? -ne 0 ]; then echo "从服务器获取文件失败。" exit 1 fi echo "文件获取成功。"
# 在环境变量中添加一条alias信息,方便执行脚本 alias transform='/Users/boweihao/Auto/transfer_and_get.sh'
|
开发版
1 2 3 4
| # 在环境变量中添加一条alias,自动从PC(或Mac)获取编译好的文件chmod,然后执行
alias ddd='cd /root/user && scp -p boweihao@192.168.48.24:/Users/boweihao/Auto/1 /root/user/ && sleep 2 && chmod 777 1 && ./1'
|