From 5eccc0d10adf702fb93a1e14a718408a89a5ba13 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=83=91=E8=8C=9E=E9=80=8D?= <15086483+zchenxiao594@user.noreply.gitee.com> Date: Wed, 6 Nov 2024 18:11:37 +0800 Subject: [PATCH 01/10] =?UTF-8?q?ART-Pi=20Smart=20=E5=BC=80=E5=8F=91?= =?UTF-8?q?=E6=9D=BF=E7=94=A8=E6=88=B7=E9=95=9C=E5=83=8F=E7=83=A7=E5=BD=95?= =?UTF-8?q?=E8=AF=B4=E6=98=8E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...47\345\275\225\350\257\264\346\230\216.md" | 283 ++++++++++++++++++ .../artpi-smart/figures/app_show.jpg | Bin 0 -> 17655 bytes .../quick-start/artpi-smart/figures/ash.jpg | Bin 0 -> 6903 bytes .../artpi-smart/figures/qemu_start.jpg | Bin 0 -> 60943 bytes 4 files changed, 283 insertions(+) create mode 100644 "rt-thread-version/rt-thread-smart/quick-start/artpi-smart/ ART-Pi\347\203\247\345\275\225\350\257\264\346\230\216.md" create mode 100644 rt-thread-version/rt-thread-smart/quick-start/artpi-smart/figures/app_show.jpg create mode 100644 rt-thread-version/rt-thread-smart/quick-start/artpi-smart/figures/ash.jpg create mode 100644 rt-thread-version/rt-thread-smart/quick-start/artpi-smart/figures/qemu_start.jpg diff --git "a/rt-thread-version/rt-thread-smart/quick-start/artpi-smart/ ART-Pi\347\203\247\345\275\225\350\257\264\346\230\216.md" "b/rt-thread-version/rt-thread-smart/quick-start/artpi-smart/ ART-Pi\347\203\247\345\275\225\350\257\264\346\230\216.md" new file mode 100644 index 0000000..8a25eeb --- /dev/null +++ "b/rt-thread-version/rt-thread-smart/quick-start/artpi-smart/ ART-Pi\347\203\247\345\275\225\350\257\264\346\230\216.md" @@ -0,0 +1,283 @@ +# ART-Pi Smart 开发板用户镜像烧录说明 + +## QEMU ARM32 用户镜像烧录说明 + +### 1. 内核编译 + +#### 操作说明 + +1. **拉取 RT-Thread 源码包** + + 执行以下指令来拉取 RT-Thread 源码库: + + ```bash + sudo git clone https://github.com/RT-Thread/rt-thread.git + ``` + + 执行指令后,将会在当前目录下创建一个rt-thread目录,然后进入 `bsp/qemu-vexpress-a9` 目录: + + ```bash + cd rt-thread/bsp/qemu-vexpress-a9 + ``` + +2. **创建包管理文件** + + 执行下列指令: + + ```bash + scons + cd /home/xxxx/.env/packages + git clone https://git.rt-thread.com/packages/realthread-packages + ``` + + 打开 Kconfig 文件: + + ```bash + vim kconfig + ``` + + 添加 realthread-packages 路径,然后配置 meniconfig: + + ```bash + scons --menuconfig + ``` + + 勾选 `ext4: The EXT4 file system for RT-Thread`,勾选 `proc: Enable proc file system`。 + 更新 pkgs: + + ```bash + pkgs --update + ``` + + 拉取 packages 中的 ext4,ukernel 目录(需要仓库权限): + + ```bash + cd packages + rm -rf <原来的 ext4包> + git clone https://git.rt-thread.com/packages/ext4.git + git checkout smart-ext4 + git clone https://git.rt-thread.com/packages/ukernel.git + ``` + +3. **编译内核** + + 执行指令: + + ```bash + scons -j8 + ``` + + 在当前目录中会生成编译后的 `rtthread.bin` 文件。 + +### 2. 制作根文件系统 + +1. **拉取 [userapps仓库](https://git.rt-thread.com/alliance/smart-apps/userapps)**: + + ```bash + cd ~ + sudo git clone https://git.rt-thread.com/alliance/smart-apps/userapps.git + ``` + + 在 `userapps` 目录中,将有如下文件: + + - **apps**:存放应用程序代码 + - **env.sh**:用于配置环境变量 + - **repo**:用于管理软件包的文件夹 + +2. **配置 `env.sh` 文件**: + + 修改 `env.sh`,使 xmake 下载的工具链是我们需要的版本: + + ```bash + vim env.sh + + #!/bin/bash + script_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" + export XMAKE_RCFILES=${script_dir}/tools/scripts/xmake.lua + export RT_XMAKE_LINK_TYPE="static" + + # 添加以下指令以设置环境变量 + export RT_XMAKE_TOOLCHAIN_ARM_VERSION=236309-e8ed057a81 + export RT_XMAKE_TOOLCHAIN_ARM_SHA256=08822163eecf4bd8cd0ae8c2d19bc9546ca749d7a862f5a7c881c4f5e1c17262 + ``` + + 保存并退出: + + ```bash + source env.sh + ``` + +3. **更换 repo 目录中的 packages**: + + ```bash + cd ../../repo + sudo rm -rf ./packages + sudo git clone https://git.rt-thread.com/alliance/smart-apps/rt-smart-repo.git + ``` + +4. **修改 busybox 代码**: + + ```bash + cd packages/b/busybox + vim xmake.lua + ``` + + 注释掉 `buildenvs.LDFLAGS = table.concat(ldflags, " ")` + +5. **拉取工具链和编译根文件系统**: + + ```bash + cd apps + xmake f -a arm + xmake + xmake smart-rootfs + ``` + +6. **写入 `inittab` 文件并放入 `rootfs` 目录**: + + ```bash + cd ~/userapps/apps/build/rootfs/etc/ + vim inittab + ``` + + 添加以下内容: + + ``` + # Mount Filesystem + ::sysinit:mkdir -p /dev/shm /dev/pts /proc /tmp /run /cmds + ::sysinit:mount -a + + # Run getty & login + console::respawn:-/bin/ash + + # using sshd + ::once:/bin/dropbear -F 2>/root/dropbear.log + ``` + +7. **生成 img 文件**: + + ```bash + cd .. + xmake smart-image + ``` + + 目前目录中生成 `ext4.img`。 + +### 3. 执行 + +1. **复制内核文件到当前目录,修改 `run.sh` 脚本**: + + ```bash + cp ~/rt-thread/bsp/qemu-vexpress-a9/rtthread.bin ./ + vim run.sh + ``` + + 内容如下: + + ```bash + #!/bin/bash + qemu-system-arm -M vexpress-a9 -kernel rtthread.bin -nographic -sd ext4.img + ``` + +2. **运行脚本:** + + ```bash + ./run.sh + ``` + + 成功进入 `ash`界面,如下图所示: + + ![Alt text](./figures/qemu_start.jpg) + +### 4. 编写自己的应用程序 + +1. **创建新的目录**: + + ```bash + cd ~/userapps/apps + mkdir welcome + ``` + +2. **创建 C 文件和 `xmake.lua`文件:** + + - **编写 `main.c`:** + + ```bash + vim welcome/main.c + ``` + + - **编写 `xmake.lua`:** + + ```bash + vim welcome/xmake.lua + ``` + + 内容如下: + + ```lua + add_rules("mode.debug", "mode.release") + + target("welcome") + do + add_files("*.c") + end + target_end() + ``` + +3. **重新编译**: + + ```bash + xmake smart-rootfs + xmake smart-image + ``` + +4. **在 `build` 目录中会重新生成 img 镜像文件**。 + +## ART-Pi Smart 开发板用户镜像烧录说明 + +### 1. 根文件系统编译过程同 QEMU + +1. **生成 `ext4.img` 文件后,插入 SD 卡**: + + ```bash + lsblk + ``` + +2. **解除挂载设备**: + + ```bash + sudo umount /dev/<挂载的设备> + ``` + +3. **格式化 SD 卡为 ext4 格式:** + + ```bash + sudo mkfs.ext4 /dev/<挂载的设备> + ``` + +4. **烧录 `ext4.img` 文件**: + + ```bash + sudo dd if=ext4.img of=/dev/<挂载的设备> bs=4M status=progress + ``` + +### 2. 内核编译及烧录过程 + +1. **同 QEMU 操作**,下载后,进入 `imx6ull-smart` 目录,其他操作同 QEMU 步骤: + + ```bash + cd rt-thread/bsp/nxp/imx/imx6ull-smart/ + ``` + +2. **编译后生成 `rtthread.bin` 文件,并使用 TFTP 烧录到开发板**: + + ```bash + setenv ipaddr 10.23.8.195; setenv serverip 10.23.8.124; tftp 0x80001000 rtthread.bin; setenv bootargs root=sd1 rootfstype=ext4 rw;dcache flush; go 0x80001000 + ``` + + 在 uboot 中执行指令,随后成功进入 `ash`界面,如下图所示: + + ![Alt text](./figures/ash.jpg) + + 至此,开发板已正常完成烧录和运行。 + diff --git a/rt-thread-version/rt-thread-smart/quick-start/artpi-smart/figures/app_show.jpg b/rt-thread-version/rt-thread-smart/quick-start/artpi-smart/figures/app_show.jpg new file mode 100644 index 0000000000000000000000000000000000000000..876440069459b43a5f6dc5bd3ed10407ddc4492b GIT binary patch literal 17655 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⋙q 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 z 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 literal 0 HcmV?d00001 -- Gitee From 86a13324ce7d28a6abb838965febc3de81325db1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=83=91=E8=8C=9E=E9=80=8D?= Date: Sun, 10 Nov 2024 22:23:42 -0800 Subject: [PATCH 02/10] =?UTF-8?q?ART-Pi=20Smart=20=E5=BC=80=E5=8F=91?= =?UTF-8?q?=E6=9D=BF=E7=94=A8=E6=88=B7=E9=95=9C=E5=83=8F=E7=83=A7=E5=BD=95?= =?UTF-8?q?=E8=AF=B4=E6=98=8E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...47\345\275\225\350\257\264\346\230\216.md" | 178 +++++++++--------- .../artpi-smart/figures/app_show.jpg | Bin .../quick-start/artpi-smart/figures/ash.jpg | Bin .../artpi-smart/figures/qemu_start.jpg | Bin 60943 -> 22974 bytes .../artpi-smart/figures/userapps.png | Bin 0 -> 2392 bytes 5 files changed, 94 insertions(+), 84 deletions(-) rename "rt-thread-version/rt-thread-smart/quick-start/artpi-smart/ ART-Pi\347\203\247\345\275\225\350\257\264\346\230\216.md" => "rt-thread-version/rt-thread-smart/quick-start/artpi-smart/ART-Pi\347\203\247\345\275\225\350\257\264\346\230\216.md" (55%) mode change 100644 => 100755 mode change 100644 => 100755 rt-thread-version/rt-thread-smart/quick-start/artpi-smart/figures/app_show.jpg mode change 100644 => 100755 rt-thread-version/rt-thread-smart/quick-start/artpi-smart/figures/ash.jpg mode change 100644 => 100755 rt-thread-version/rt-thread-smart/quick-start/artpi-smart/figures/qemu_start.jpg create mode 100755 rt-thread-version/rt-thread-smart/quick-start/artpi-smart/figures/userapps.png diff --git "a/rt-thread-version/rt-thread-smart/quick-start/artpi-smart/ ART-Pi\347\203\247\345\275\225\350\257\264\346\230\216.md" "b/rt-thread-version/rt-thread-smart/quick-start/artpi-smart/ART-Pi\347\203\247\345\275\225\350\257\264\346\230\216.md" old mode 100644 new mode 100755 similarity index 55% rename from "rt-thread-version/rt-thread-smart/quick-start/artpi-smart/ ART-Pi\347\203\247\345\275\225\350\257\264\346\230\216.md" rename to "rt-thread-version/rt-thread-smart/quick-start/artpi-smart/ART-Pi\347\203\247\345\275\225\350\257\264\346\230\216.md" index 8a25eeb..0898147 --- "a/rt-thread-version/rt-thread-smart/quick-start/artpi-smart/ ART-Pi\347\203\247\345\275\225\350\257\264\346\230\216.md" +++ "b/rt-thread-version/rt-thread-smart/quick-start/artpi-smart/ART-Pi\347\203\247\345\275\225\350\257\264\346\230\216.md" @@ -11,7 +11,7 @@ 执行以下指令来拉取 RT-Thread 源码库: ```bash - sudo git clone https://github.com/RT-Thread/rt-thread.git + git clone https://github.com/RT-Thread/rt-thread.git ``` 执行指令后,将会在当前目录下创建一个rt-thread目录,然后进入 `bsp/qemu-vexpress-a9` 目录: @@ -20,53 +20,32 @@ cd rt-thread/bsp/qemu-vexpress-a9 ``` -2. **创建包管理文件** - - 执行下列指令: - - ```bash - scons - cd /home/xxxx/.env/packages - git clone https://git.rt-thread.com/packages/realthread-packages - ``` +2. **更新在线软件包,更新 pkgs** - 打开 Kconfig 文件: - - ```bash - vim kconfig - ``` + ```bash + source ~/.env/env.sh + pkgs --update + ``` - 添加 realthread-packages 路径,然后配置 meniconfig: - - ```bash +3. **编译内核** + + 配置内核 + + ``` scons --menuconfig ``` - 勾选 `ext4: The EXT4 file system for RT-Thread`,勾选 `proc: Enable proc file system`。 - 更新 pkgs: - - ```bash - pkgs --update ``` - - 拉取 packages 中的 ext4,ukernel 目录(需要仓库权限): - - ```bash - cd packages - rm -rf <原来的 ext4包> - git clone https://git.rt-thread.com/packages/ext4.git - git checkout smart-ext4 - git clone https://git.rt-thread.com/packages/ukernel.git + 选中:Support to create IO mapping in the kernel address space after system initlalization. + 以及:Enable RT-Thread Smart (microkernel on kernel/userland) ``` -3. **编译内核** - 执行指令: - + ```bash scons -j8 ``` - + 在当前目录中会生成编译后的 `rtthread.bin` 文件。 ### 2. 制作根文件系统 @@ -75,12 +54,14 @@ ```bash cd ~ - sudo git clone https://git.rt-thread.com/alliance/smart-apps/userapps.git + git clone https://git.rt-thread.com/alliance/smart-apps/userapps.git ``` 在 `userapps` 目录中,将有如下文件: - - - **apps**:存放应用程序代码 + + ![userapps.png](figures/userapps.png) + + - **apps**:存放应用程序代码,包管理文件夹及编译得到的各类文件 - **env.sh**:用于配置环境变量 - **repo**:用于管理软件包的文件夹 @@ -101,29 +82,12 @@ export RT_XMAKE_TOOLCHAIN_ARM_SHA256=08822163eecf4bd8cd0ae8c2d19bc9546ca749d7a862f5a7c881c4f5e1c17262 ``` - 保存并退出: + 保存并退出,配置环境 ```bash source env.sh ``` -3. **更换 repo 目录中的 packages**: - - ```bash - cd ../../repo - sudo rm -rf ./packages - sudo git clone https://git.rt-thread.com/alliance/smart-apps/rt-smart-repo.git - ``` - -4. **修改 busybox 代码**: - - ```bash - cd packages/b/busybox - vim xmake.lua - ``` - - 注释掉 `buildenvs.LDFLAGS = table.concat(ldflags, " ")` - 5. **拉取工具链和编译根文件系统**: ```bash @@ -157,37 +121,53 @@ 7. **生成 img 文件**: ```bash - cd .. - xmake smart-image + cd ~/userapps/apps + xmake smart-image -f fat + ``` + + 在build目录中生成 `fat.img`文件。 + + ``` + cd build/ + cp fat.img ~/rt-thread/bsp/qemu-vexpress-a9/&&cd ~/rt-thread/bsp/qemu-vexpress-a9 ``` + + - 目前目录中生成 `ext4.img`。 +### 3. 在qemu中运行 -### 3. 执行 +1. **安装qemu及arm环境** + + ```bash + sudo apt update + sudo apt install qemu qemu-system qemu-system-arm + ``` -1. **复制内核文件到当前目录,修改 `run.sh` 脚本**: +2. **修改 `qemu` 运行脚本**: ```bash - cp ~/rt-thread/bsp/qemu-vexpress-a9/rtthread.bin ./ - vim run.sh + vim qemu-nographic.sh ``` 内容如下: ```bash - #!/bin/bash - qemu-system-arm -M vexpress-a9 -kernel rtthread.bin -nographic -sd ext4.img + if [ ! -f "sd.bin" ]; then + dd if=/dev/zero of=sd.bin bs=1024 count=65536 + fi + + qemu-system-arm -M vexpress-a9 -smp cpus=2 -kernel rtthread.bin -nographic -sd fat.img ``` -2. **运行脚本:** +3. **运行脚本:** ```bash - ./run.sh + ./qemu-nographic.sh ``` 成功进入 `ash`界面,如下图所示: - - ![Alt text](./figures/qemu_start.jpg) + + ![qemu_start.jpg](figures/qemu_start.jpg) ### 4. 编写自己的应用程序 @@ -228,37 +208,41 @@ ```bash xmake smart-rootfs - xmake smart-image + xmake smart-image -f fat ``` 4. **在 `build` 目录中会重新生成 img 镜像文件**。 + ``` + cd build/ + cp fat.img ~/rt-thread/bsp/qemu-vexpress-a9/&&cd ~/rt-thread/bsp/qemu-vexpress-a9 + ``` +5. **进入bsp目录并运行qemu启动脚本**。 + ```bash + cd ~/rt-thread/bsp/qemu-vexpress-a9 + ./qemu-nographic.sh + ``` + ![app_show.jpg](figures/app_show.jpg) ## ART-Pi Smart 开发板用户镜像烧录说明 ### 1. 根文件系统编译过程同 QEMU -1. **生成 `ext4.img` 文件后,插入 SD 卡**: +1. **生成 `fat.img` 文件后,插入 SD 卡**: ```bash lsblk ``` -2. **解除挂载设备**: - - ```bash - sudo umount /dev/<挂载的设备> - ``` - -3. **格式化 SD 卡为 ext4 格式:** +3. **格式化 SD 卡指定分区为 fat 格式:** ```bash - sudo mkfs.ext4 /dev/<挂载的设备> + sudo mkfs.vfat -F 32 /dev/<挂载的设备> ``` -4. **烧录 `ext4.img` 文件**: +4. **烧录 `fat.img` 文件**: ```bash - sudo dd if=ext4.img of=/dev/<挂载的设备> bs=4M status=progress + sudo dd if=fat.img of=/dev/<挂载的设备> bs=4M status=progress ``` ### 2. 内核编译及烧录过程 @@ -269,15 +253,41 @@ cd rt-thread/bsp/nxp/imx/imx6ull-smart/ ``` + **配置内核后,修改mnt.c文件**,该文件位置在rt-thread/bsp/nxp/imx/imx6ull-smart/applications/mnt.c + + ``` + vim ~/rt-thread/bsp/nxp/imx/imx6ull-smart/applications/mnt.c + ``` + + ```c + int part_id = 0; + if (dfs_mount("emmc0", "/", "elm", 0, (void *)part_id) != 0) + { + if (dfs_mount("sd0", "/", "elm", 0, (void *)part_id) != 0) + { + rt_kprintf("Dir / mount failed!\n"); + return -1; + } + else + rt_kprintf("sd0 file system initialization done!\n"); + } + else + { + rt_kprintf("emmc file system initialization done!\n"); + } + ``` + + 修改“emmc"为自己烧录的sd卡分区,sd0对应sdx1,sd1对应sdx2,以此类推。 + 2. **编译后生成 `rtthread.bin` 文件,并使用 TFTP 烧录到开发板**: ```bash - setenv ipaddr 10.23.8.195; setenv serverip 10.23.8.124; tftp 0x80001000 rtthread.bin; setenv bootargs root=sd1 rootfstype=ext4 rw;dcache flush; go 0x80001000 + setenv ipaddr 10.23.8.195; setenv serverip 10.23.8.124; tftp 0x80001000 rtthread.bin; setenv bootargs root=sd1 rootfstype=fat rw;dcache flush; go 0x80001000 ``` 在 uboot 中执行指令,随后成功进入 `ash`界面,如下图所示: - ![Alt text](./figures/ash.jpg) + ![ash.jpg](./figures/ash.jpg) 至此,开发板已正常完成烧录和运行。 diff --git a/rt-thread-version/rt-thread-smart/quick-start/artpi-smart/figures/app_show.jpg b/rt-thread-version/rt-thread-smart/quick-start/artpi-smart/figures/app_show.jpg old mode 100644 new mode 100755 diff --git a/rt-thread-version/rt-thread-smart/quick-start/artpi-smart/figures/ash.jpg b/rt-thread-version/rt-thread-smart/quick-start/artpi-smart/figures/ash.jpg old mode 100644 new mode 100755 diff --git a/rt-thread-version/rt-thread-smart/quick-start/artpi-smart/figures/qemu_start.jpg b/rt-thread-version/rt-thread-smart/quick-start/artpi-smart/figures/qemu_start.jpg old mode 100644 new mode 100755 index 6f659232999f3aa85e58b2f7820f794c049f97d3..5ec1fbedaadc27d956a2fb50799423e4afda29f2 GIT binary patch literal 22974 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 literal 60943 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 z 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 diff --git a/rt-thread-version/rt-thread-smart/quick-start/artpi-smart/figures/userapps.png b/rt-thread-version/rt-thread-smart/quick-start/artpi-smart/figures/userapps.png new file mode 100755 index 0000000000000000000000000000000000000000..c303398c831189fcb02d01545bc468a0c21a9e88 GIT binary patch literal 2392 zcmV-e38(gnP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D2<=HkK~#8N?VUYt z8#@qy-!YsYSVfR3NC4L7x#H7goSRdZ_V%2K z9V$P}o9}gA`)!6lwJ^$6b z{1}d(-F!8#eq9dJWh^ITsSk_t;kSAJ{ocHO$Ha~jCt?sQuw8TMc)XZZ$jTFBQ6anY ztDCpvT#)VQb)GKg*o6GWy#8ia$KQT3v1262c(=JQC+qDbv8s@jr%DvEmz7<;J|kNU zPNsfU3&$B&m{KgPj<3vfx@Ga}%ADGIhSG&&zk0^lB?#1ktL*W7tDDPkj^q>DDV7<= zCa(CVNW!m<|Cl!)@Lail0mo6;a2%m4Ymhs}VxA=Z7w>+WGl-vk`U3H?%-`Ahvrj)s z9P5)}T$vEN*qGhj&TKC1Yb#_gW}m(tUdR__v!ko-_N@>_ITQ*Ze>E!*QMsCwR+n7t z`K>)?CCB}35vvm>uB1cTsH|J^m1%2zkjlg~(}leH>|})kbb!cMAxo=ilyNT8P!8t1 zH)l@DMcUP8Qa=jY=Sxxz9~iWLDMnvIxe*lS&TO~4*@UdCX5}f63%T6yCC9x&cIR-l zdV2jfr0Eed5viBCZA)K18cS`OCS;BztWvIVH4O4gD^-$D5;83VVaiIf$9!o8`{L7m zcATK~m2JT???+-nI{`0HSk3lIxhiB`6)Q(hA!J^-4k^yX+_}~5mEW#FA-gS*DMH2% zhrWC?mfAFzkiGD%)NnQGMd_tkN|COP9g>jkG1+nmKzXqBF@y@atP9}sR)mZqmtwv> zwRS?+0IZefhYTzM$sT+C#p3(^bu@wgBqektgWJMuAN z<@+F&iD~-xkh9ff7Rv=3B$tjeGMP%N;Bg_N$fGEd(nuFJ&r7N>&CF_Y#!1ETZ%wy;xtAYG(}F>27s{ZG}kFxRrNN(7a5n zL-2}nC`2L8%}{Djh{3IHj};JW6m4s)fr(cv(Wo@((=d zvnr5GX8zHh_B{O=HuFQ2mAs4^+sbsF3;i6v{I5 zXHtyGE8N?>wq?Ncmfd+TWbza^Dq$D1X?Icjwmx@EguJvYRmdDF|?i=tStd|GVATd=R(Cp+7loh9W^0KeQzfU`R_i&d^+`ZO7%6w;s8UR z;+t2-i+nTp&q*SeFivQk=(swhu^>&lnjL>YPoSPos;^AjN+=_?6IQc$EDF-6O=67# z1o>t{_Gxz@&$aKPt7E-&>1GfzwAsH`zV5tCI-Zm2$iVB2`_BiYYqw$E#%s4co`N(V zr25k9^np{(wJDTigS54UPwU{ymHOUCWy^wTWE2!WtY-g*nC}m5r&OO1gNuNF@Vh(a z-T-=j&i=WHUC0IGGmx2u$}|_NON%0v@%hR+J#u~12xX?#W8TIfxE!oMuR95l6*9zQ z9w%rk?1S#jZ$1m$a2n48SAR_aeDY((TPcOZV^Au|kiwVgI5)mMvg<$1=0 zY?-@%uwpDF(IVtb2JUtIC-gW}Oi3Qg2|1J*UQ=1sB1WVubA5Y0vTFklJwYLKd&x`rO28m5K*f&wB}(Kg2xPpze#$aweS*A*1mij1AJ`|R676lv#x)>q7pFrTpg)RweAo=b5m{JfR=-ZC!ZzSzeF_^#!7SoFwoLy}7<45VCUlD+gAiD0vO*r#mGZXK*UPZX zAkg}ruIoE5&QKN#IFa_HrFQSIF_6?I_ilRImIyVmy6|$ln zB|0|`5f!qc93?t850M5TD~h5he*+b=@+hERtd(%-73KIiG5-TK@sUu1gGuB70000< KMNUMnLSTZ Date: Sun, 10 Nov 2024 22:55:58 -0800 Subject: [PATCH 03/10] =?UTF-8?q?ART-Pi=20Smart=20=E5=BC=80=E5=8F=91?= =?UTF-8?q?=E6=9D=BF=E7=94=A8=E6=88=B7=E9=95=9C=E5=83=8F=E7=83=A7=E5=BD=95?= =?UTF-8?q?=E8=AF=B4=E6=98=8E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...47\345\275\225\350\257\264\346\230\216.md" | 118 ++++++++---------- 1 file changed, 51 insertions(+), 67 deletions(-) diff --git "a/rt-thread-version/rt-thread-smart/quick-start/artpi-smart/ART-Pi\347\203\247\345\275\225\350\257\264\346\230\216.md" "b/rt-thread-version/rt-thread-smart/quick-start/artpi-smart/ART-Pi\347\203\247\345\275\225\350\257\264\346\230\216.md" index 0898147..0964136 100755 --- "a/rt-thread-version/rt-thread-smart/quick-start/artpi-smart/ART-Pi\347\203\247\345\275\225\350\257\264\346\230\216.md" +++ "b/rt-thread-version/rt-thread-smart/quick-start/artpi-smart/ART-Pi\347\203\247\345\275\225\350\257\264\346\230\216.md" @@ -1,10 +1,8 @@ -# ART-Pi Smart 开发板用户镜像烧录说明 - -## QEMU ARM32 用户镜像烧录说明 +# 一.QEMU ARM32 用户镜像烧录说明 -### 1. 内核编译 +## 1. 内核编译 -#### 操作说明 +### 操作说明 1. **拉取 RT-Thread 源码包** @@ -19,41 +17,35 @@ ```bash cd rt-thread/bsp/qemu-vexpress-a9 ``` - -2. **更新在线软件包,更新 pkgs** - - ```bash - source ~/.env/env.sh - pkgs --update - ``` - -3. **编译内核** +2. **编译内核** 配置内核 ``` scons --menuconfig ``` +3. **更新在线软件包,更新 pkgs** + ```bash + source ~/.env/env.sh + pkgs --update + ``` + ``` + 选中:RT_IOREMAP_LATE. + 以及:rt_using_smart + ``` - ``` - 选中:Support to create IO mapping in the kernel address space after system initlalization. - 以及:Enable RT-Thread Smart (microkernel on kernel/userland) - ``` - - 执行指令: - - ```bash - scons -j8 - ``` + 执行指令: + ```bash + scons -j8 + ``` - 在当前目录中会生成编译后的 `rtthread.bin` 文件。 + 在当前目录中会生成编译后的 `rtthread.bin` 文件。 -### 2. 制作根文件系统 +## 2. 制作根文件系统 1. **拉取 [userapps仓库](https://git.rt-thread.com/alliance/smart-apps/userapps)**: ```bash - cd ~ git clone https://git.rt-thread.com/alliance/smart-apps/userapps.git ``` @@ -61,28 +53,11 @@ ![userapps.png](figures/userapps.png) - - **apps**:存放应用程序代码,包管理文件夹及编译得到的各类文件 + - **apps**:存放应用程序代码,包管理文件夹及编译产物 - **env.sh**:用于配置环境变量 - **repo**:用于管理软件包的文件夹 -2. **配置 `env.sh` 文件**: - - 修改 `env.sh`,使 xmake 下载的工具链是我们需要的版本: - - ```bash - vim env.sh - - #!/bin/bash - script_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" - export XMAKE_RCFILES=${script_dir}/tools/scripts/xmake.lua - export RT_XMAKE_LINK_TYPE="static" - - # 添加以下指令以设置环境变量 - export RT_XMAKE_TOOLCHAIN_ARM_VERSION=236309-e8ed057a81 - export RT_XMAKE_TOOLCHAIN_ARM_SHA256=08822163eecf4bd8cd0ae8c2d19bc9546ca749d7a862f5a7c881c4f5e1c17262 - ``` - - 保存并退出,配置环境 +2. **配置环境**: ```bash source env.sh @@ -100,7 +75,7 @@ 6. **写入 `inittab` 文件并放入 `rootfs` 目录**: ```bash - cd ~/userapps/apps/build/rootfs/etc/ + cd userapps/apps/build/rootfs/etc/ vim inittab ``` @@ -121,20 +96,20 @@ 7. **生成 img 文件**: ```bash - cd ~/userapps/apps + cd userapps/apps xmake smart-image -f fat ``` - 在build目录中生成 `fat.img`文件。 + 在build目录中生成 `fat.img`文件,复制该文件到bsp目录下。 ``` cd build/ - cp fat.img ~/rt-thread/bsp/qemu-vexpress-a9/&&cd ~/rt-thread/bsp/qemu-vexpress-a9 + cp fat.img rt-thread/bsp/qemu-vexpress-a9/&&cd rt-thread/bsp/qemu-vexpress-a9 ``` -### 3. 在qemu中运行 +## 3. 在qemu中运行 1. **安装qemu及arm环境** @@ -169,12 +144,12 @@ ![qemu_start.jpg](figures/qemu_start.jpg) -### 4. 编写自己的应用程序 +## 4. 编写自己的应用程序 1. **创建新的目录**: - + 进入apps目录 ```bash - cd ~/userapps/apps + cd userapps/apps mkdir welcome ``` @@ -184,6 +159,15 @@ ```bash vim welcome/main.c + + #include + + int main(int argc, char **argv) + { + printf("Welcome to RT-Thread!\n"); + + return 0; + } ``` - **编写 `xmake.lua`:** @@ -191,7 +175,6 @@ ```bash vim welcome/xmake.lua ``` - 内容如下: ```lua @@ -211,41 +194,42 @@ xmake smart-image -f fat ``` -4. **在 `build` 目录中会重新生成 img 镜像文件**。 +4. **在 `build` 目录中会重新生成 img 镜像文件**,拷贝到bsp目录。 ``` cd build/ - cp fat.img ~/rt-thread/bsp/qemu-vexpress-a9/&&cd ~/rt-thread/bsp/qemu-vexpress-a9 + cp fat.img rt-thread/bsp/qemu-vexpress-a9 ``` 5. **进入bsp目录并运行qemu启动脚本**。 ```bash - cd ~/rt-thread/bsp/qemu-vexpress-a9 + cd rt-thread/bsp/qemu-vexpress-a9 ./qemu-nographic.sh ``` ![app_show.jpg](figures/app_show.jpg) -## ART-Pi Smart 开发板用户镜像烧录说明 +# ART-Pi Smart 开发板用户镜像烧录说明 -### 1. 根文件系统编译过程同 QEMU +## 1. 根文件系统编译过程同 QEMU 1. **生成 `fat.img` 文件后,插入 SD 卡**: - + 插入sd卡前lsblk,查看当前所有的sdx设备 ```bash lsblk ``` + 插入后再次lsblk,多出的sd设备就是该sd卡 3. **格式化 SD 卡指定分区为 fat 格式:** ```bash - sudo mkfs.vfat -F 32 /dev/<挂载的设备> + sudo mkfs.vfat -F 32 /dev/<插入的设备分区> ``` 4. **烧录 `fat.img` 文件**: ```bash - sudo dd if=fat.img of=/dev/<挂载的设备> bs=4M status=progress + sudo dd if=fat.img of=/dev/<插入的设备分区> bs=4M status=progress ``` -### 2. 内核编译及烧录过程 +## 2. 内核编译及烧录过程 1. **同 QEMU 操作**,下载后,进入 `imx6ull-smart` 目录,其他操作同 QEMU 步骤: @@ -256,7 +240,7 @@ **配置内核后,修改mnt.c文件**,该文件位置在rt-thread/bsp/nxp/imx/imx6ull-smart/applications/mnt.c ``` - vim ~/rt-thread/bsp/nxp/imx/imx6ull-smart/applications/mnt.c + vim rt-thread/bsp/nxp/imx/imx6ull-smart/applications/mnt.c ``` ```c @@ -277,12 +261,12 @@ } ``` - 修改“emmc"为自己烧录的sd卡分区,sd0对应sdx1,sd1对应sdx2,以此类推。 + 修改“emmc0"为自己烧录的sd卡分区,sd0对应第一个分区,sd1对应第二个分区,以此类推。 2. **编译后生成 `rtthread.bin` 文件,并使用 TFTP 烧录到开发板**: ```bash - setenv ipaddr 10.23.8.195; setenv serverip 10.23.8.124; tftp 0x80001000 rtthread.bin; setenv bootargs root=sd1 rootfstype=fat rw;dcache flush; go 0x80001000 + setenv ipaddr 10.23.8.195; setenv serverip 10.23.8.124; tftp 0x80001000 rtthread.bin; dcache flush; go 0x80001000 ``` 在 uboot 中执行指令,随后成功进入 `ash`界面,如下图所示: -- Gitee From ac65ca0a20242d35a9ab39e1cb708bff6b618b59 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=83=91=E8=8C=9E=E9=80=8D?= Date: Sun, 10 Nov 2024 23:15:26 -0800 Subject: [PATCH 04/10] =?UTF-8?q?ART-Pi=20Smart=20=E5=BC=80=E5=8F=91?= =?UTF-8?q?=E6=9D=BF=E7=94=A8=E6=88=B7=E9=95=9C=E5=83=8F=E7=83=A7=E5=BD=95?= =?UTF-8?q?=E8=AF=B4=E6=98=8E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...47\345\275\225\350\257\264\346\230\216.md" | 20 ++++++++----------- 1 file changed, 8 insertions(+), 12 deletions(-) diff --git "a/rt-thread-version/rt-thread-smart/quick-start/artpi-smart/ART-Pi\347\203\247\345\275\225\350\257\264\346\230\216.md" "b/rt-thread-version/rt-thread-smart/quick-start/artpi-smart/ART-Pi\347\203\247\345\275\225\350\257\264\346\230\216.md" index 0964136..d41bfb3 100755 --- "a/rt-thread-version/rt-thread-smart/quick-start/artpi-smart/ART-Pi\347\203\247\345\275\225\350\257\264\346\230\216.md" +++ "b/rt-thread-version/rt-thread-smart/quick-start/artpi-smart/ART-Pi\347\203\247\345\275\225\350\257\264\346\230\216.md" @@ -31,7 +31,7 @@ ``` ``` 选中:RT_IOREMAP_LATE. - 以及:rt_using_smart + 以及:RT_USING_SMART ``` 执行指令: @@ -43,10 +43,10 @@ ## 2. 制作根文件系统 -1. **拉取 [userapps仓库](https://git.rt-thread.com/alliance/smart-apps/userapps)**: +1. **拉取 [userapps仓库](https://github.com/RT-Thread/userapps)**: ```bash - git clone https://git.rt-thread.com/alliance/smart-apps/userapps.git + git clone https://github.com/RT-Thread/userapps ``` 在 `userapps` 目录中,将有如下文件: @@ -100,14 +100,12 @@ xmake smart-image -f fat ``` - 在build目录中生成 `fat.img`文件,复制该文件到bsp目录下。 + 在build目录中生成 `fat.img`文件。 ``` cd build/ - cp fat.img rt-thread/bsp/qemu-vexpress-a9/&&cd rt-thread/bsp/qemu-vexpress-a9 + 拷贝fat.img文件到rt-thread/bsp/qemu-vexpress-a9目录中 ``` - - ## 3. 在qemu中运行 @@ -127,10 +125,6 @@ 内容如下: ```bash - if [ ! -f "sd.bin" ]; then - dd if=/dev/zero of=sd.bin bs=1024 count=65536 - fi - qemu-system-arm -M vexpress-a9 -smp cpus=2 -kernel rtthread.bin -nographic -sd fat.img ``` @@ -159,7 +153,9 @@ ```bash vim welcome/main.c - + ``` + 内容如下: + ``` #include int main(int argc, char **argv) -- Gitee From 60a566bea74aa970b29870927371f8c93bc94930 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=83=91=E8=8C=9E=E9=80=8D?= Date: Mon, 11 Nov 2024 00:37:43 -0800 Subject: [PATCH 05/10] =?UTF-8?q?ART-Pi=20Smart=20=E5=BC=80=E5=8F=91?= =?UTF-8?q?=E6=9D=BF=E7=94=A8=E6=88=B7=E9=95=9C=E5=83=8F=E7=83=A7=E5=BD=95?= =?UTF-8?q?=E8=AF=B4=E6=98=8E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...ART-Pi\347\203\247\345\275\225\350\257\264\346\230\216.md" | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git "a/rt-thread-version/rt-thread-smart/quick-start/artpi-smart/ART-Pi\347\203\247\345\275\225\350\257\264\346\230\216.md" "b/rt-thread-version/rt-thread-smart/quick-start/artpi-smart/ART-Pi\347\203\247\345\275\225\350\257\264\346\230\216.md" index d41bfb3..6d24650 100755 --- "a/rt-thread-version/rt-thread-smart/quick-start/artpi-smart/ART-Pi\347\203\247\345\275\225\350\257\264\346\230\216.md" +++ "b/rt-thread-version/rt-thread-smart/quick-start/artpi-smart/ART-Pi\347\203\247\345\275\225\350\257\264\346\230\216.md" @@ -30,8 +30,8 @@ pkgs --update ``` ``` - 选中:RT_IOREMAP_LATE. - 以及:RT_USING_SMART + 选中:RT_USING_SMART + 以及:RT_IOREMAP_LATE ``` 执行指令: -- Gitee From c34fc2495fbf6879ab354fa3423a7f965af82271 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=83=91=E8=8C=9E=E9=80=8D?= Date: Mon, 11 Nov 2024 02:08:35 -0800 Subject: [PATCH 06/10] =?UTF-8?q?ART-Pi=20Smart=20=E5=BC=80=E5=8F=91?= =?UTF-8?q?=E6=9D=BF=E7=94=A8=E6=88=B7=E9=95=9C=E5=83=8F=E7=83=A7=E5=BD=95?= =?UTF-8?q?=E8=AF=B4=E6=98=8E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...47\345\275\225\350\257\264\346\230\216.md" | 127 ++++++++---------- 1 file changed, 55 insertions(+), 72 deletions(-) diff --git "a/rt-thread-version/rt-thread-smart/quick-start/artpi-smart/ART-Pi\347\203\247\345\275\225\350\257\264\346\230\216.md" "b/rt-thread-version/rt-thread-smart/quick-start/artpi-smart/ART-Pi\347\203\247\345\275\225\350\257\264\346\230\216.md" index 6d24650..04279cc 100755 --- "a/rt-thread-version/rt-thread-smart/quick-start/artpi-smart/ART-Pi\347\203\247\345\275\225\350\257\264\346\230\216.md" +++ "b/rt-thread-version/rt-thread-smart/quick-start/artpi-smart/ART-Pi\347\203\247\345\275\225\350\257\264\346\230\216.md" @@ -1,48 +1,6 @@ -# 一.QEMU ARM32 用户镜像烧录说明 - -## 1. 内核编译 - -### 操作说明 - -1. **拉取 RT-Thread 源码包** - - 执行以下指令来拉取 RT-Thread 源码库: - - ```bash - git clone https://github.com/RT-Thread/rt-thread.git - ``` - - 执行指令后,将会在当前目录下创建一个rt-thread目录,然后进入 `bsp/qemu-vexpress-a9` 目录: - - ```bash - cd rt-thread/bsp/qemu-vexpress-a9 - ``` -2. **编译内核** - - 配置内核 - - ``` - scons --menuconfig - ``` -3. **更新在线软件包,更新 pkgs** - ```bash - source ~/.env/env.sh - pkgs --update - ``` - ``` - 选中:RT_USING_SMART - 以及:RT_IOREMAP_LATE - ``` - - 执行指令: - ```bash - scons -j8 - ``` - - 在当前目录中会生成编译后的 `rtthread.bin` 文件。 - -## 2. 制作根文件系统 +# ART-Pi Smart 开发板用户镜像烧录说明 +## 1. 制作根文件系统 1. **拉取 [userapps仓库](https://github.com/RT-Thread/userapps)**: ```bash @@ -56,14 +14,12 @@ - **apps**:存放应用程序代码,包管理文件夹及编译产物 - **env.sh**:用于配置环境变量 - **repo**:用于管理软件包的文件夹 - 2. **配置环境**: ```bash source env.sh ``` - -5. **拉取工具链和编译根文件系统**: +3. **拉取工具链和编译根文件系统**: ```bash cd apps @@ -71,8 +27,7 @@ xmake xmake smart-rootfs ``` - -6. **写入 `inittab` 文件并放入 `rootfs` 目录**: +4. **写入 `inittab` 文件并放入 `rootfs` 目录**: ```bash cd userapps/apps/build/rootfs/etc/ @@ -92,8 +47,7 @@ # using sshd ::once:/bin/dropbear -F 2>/root/dropbear.log ``` - -7. **生成 img 文件**: +5. **生成 img 文件**: ```bash cd userapps/apps @@ -107,16 +61,54 @@ 拷贝fat.img文件到rt-thread/bsp/qemu-vexpress-a9目录中 ``` -## 3. 在qemu中运行 +## 2. 内核编译 +1. **拉取 RT-Thread 源码包** + + 执行以下指令来拉取 RT-Thread 源码库: + + ```bash + git clone https://github.com/RT-Thread/rt-thread.git + ``` + + 执行指令后,将会在当前目录下创建一个rt-thread目录,然后进入 `bsp/qemu-vexpress-a9` 目录: + + ```bash + cd rt-thread/bsp/qemu-vexpress-a9 + ``` +2. **编译内核** + + 配置内核 -1. **安装qemu及arm环境** + ``` + scons --menuconfig + ``` +3. **更新在线软件包,更新 pkgs** + ```bash + source ~/.env/env.sh + pkgs --update + ``` + ``` + 选中:RT_USING_SMART + 以及:RT_IOREMAP_LATE + ``` + + 执行指令: + ```bash + scons -j8 + ``` + + 在当前目录中会生成编译后的 `rtthread.bin` 文件。 + + +4. **在qemu中验证** + + 1.**安装qemu及arm环境** ```bash sudo apt update sudo apt install qemu qemu-system qemu-system-arm ``` - -2. **修改 `qemu` 运行脚本**: + 2.**修改 `qemu` 运行脚本:** ```bash vim qemu-nographic.sh @@ -127,9 +119,7 @@ ```bash qemu-system-arm -M vexpress-a9 -smp cpus=2 -kernel rtthread.bin -nographic -sd fat.img ``` - -3. **运行脚本:** - + 3.**运行脚本:** ```bash ./qemu-nographic.sh ``` @@ -138,17 +128,14 @@ ![qemu_start.jpg](figures/qemu_start.jpg) -## 4. 编写自己的应用程序 - +## 3. 编写自己的应用程序 1. **创建新的目录**: 进入apps目录 ```bash cd userapps/apps mkdir welcome ``` - 2. **创建 C 文件和 `xmake.lua`文件:** - - **编写 `main.c`:** ```bash @@ -182,14 +169,11 @@ end target_end() ``` - 3. **重新编译**: - ```bash xmake smart-rootfs xmake smart-image -f fat ``` - 4. **在 `build` 目录中会重新生成 img 镜像文件**,拷贝到bsp目录。 ``` cd build/ @@ -202,9 +186,7 @@ ``` ![app_show.jpg](figures/app_show.jpg) -# ART-Pi Smart 开发板用户镜像烧录说明 - -## 1. 根文件系统编译过程同 QEMU +## 4. 烧录img文件到sd卡 1. **生成 `fat.img` 文件后,插入 SD 卡**: 插入sd卡前lsblk,查看当前所有的sdx设备 @@ -213,21 +195,22 @@ ``` 插入后再次lsblk,多出的sd设备就是该sd卡 -3. **格式化 SD 卡指定分区为 fat 格式:** +2. **格式化 SD 卡指定分区为 fat 格式:** ```bash sudo mkfs.vfat -F 32 /dev/<插入的设备分区> ``` -4. **烧录 `fat.img` 文件**: +3. **烧录 `fat.img` 文件**: + 在userapps/apps/build目录下 ```bash sudo dd if=fat.img of=/dev/<插入的设备分区> bs=4M status=progress ``` -## 2. 内核编译及烧录过程 +## 5. 在开发板中运行 -1. **同 QEMU 操作**,下载后,进入 `imx6ull-smart` 目录,其他操作同 QEMU 步骤: +1. **内核编译**,git下rt-thread文件后进入 `imx6ull-smart` 目录,其他操作同 QEMU 步骤: ```bash cd rt-thread/bsp/nxp/imx/imx6ull-smart/ -- Gitee From 91f718d1099abf94c6254edc33ad2f8f67ee7f63 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=83=91=E8=8C=9E=E9=80=8D?= Date: Wed, 13 Nov 2024 18:08:35 -0800 Subject: [PATCH 07/10] =?UTF-8?q?ART-Pi=20Smart=E5=BF=AB=E9=80=9F=E4=B8=8A?= =?UTF-8?q?=E6=89=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...53\351\200\237\344\270\212\346\211\213.md" | 270 ++++++++++++++++++ 1 file changed, 270 insertions(+) create mode 100755 "rt-thread-version/rt-thread-smart/quick-start/artpi-smart/ART-Pi Smart \345\277\253\351\200\237\344\270\212\346\211\213.md" diff --git "a/rt-thread-version/rt-thread-smart/quick-start/artpi-smart/ART-Pi Smart \345\277\253\351\200\237\344\270\212\346\211\213.md" "b/rt-thread-version/rt-thread-smart/quick-start/artpi-smart/ART-Pi Smart \345\277\253\351\200\237\344\270\212\346\211\213.md" new file mode 100755 index 0000000..88806c6 --- /dev/null +++ "b/rt-thread-version/rt-thread-smart/quick-start/artpi-smart/ART-Pi Smart \345\277\253\351\200\237\344\270\212\346\211\213.md" @@ -0,0 +1,270 @@ +# ART-Pi Smart 快速上手 + 本文将引导您如何快速上手ART-Pi Smart,从头开始构建RT-Smart实时操作系统,涵盖制作根文件系统、内核编译、应用程序开发、烧录和在开发板中运行的完整流程。 + +## 1. 系统环境 +1. **操作系统**: + 建议使用 Ubuntu20.04 发行版,确保系统能够顺利运行所有相关工具。 + 安装基本的开发工具包: + + ```bash + sudo apt update + sudo apt install build-essential + ``` +2. **依赖工具**: + 安装所需的开发工具,如 Git、Make、QEMU 等: + + ```bash + sudo apt install git make gcc g++ qemu qemu-system qemu-system-arm tftp vim python3 python3-pip curl libncurses5-dev + ``` + + +## 2. 制作根文件系统 +1. **拉取 [userapps仓库](https://github.com/RT-Thread/userapps)**: + userapps仓库包含了一些应用程序和配置文件,能够快速生成根文件系统,并为 RT-Thread 操作系统构建所需的应用程序。 + ```bash + git clone https://github.com/RT-Thread/userapps + ``` + + 在 `userapps` 目录中,将有如下文件: + + ![userapps.png](figures/userapps.png) + + - **apps**:存放应用程序代码,包管理文件夹及编译产物 + - **env.sh**:用于配置环境变量 + - **repo**:用于管理软件包的文件夹 +2. **配置环境**: + + ```bash + source env.sh + ``` +3. **拉取工具链和编译根文件系统**: + 为了编译 ARM 目标平台上的代码,您需要下载并安装 ARM 交叉编译工具链。可以选择使用 arm-linux-musleabi 工具链: + + ```bash + cd apps + xmake f -a arm + xmake + xmake smart-rootfs + ``` +4. **写入 `inittab` 文件并放入 `rootfs` 目录**: + inittab 文件是一个用于配置 Linux 系统或类 Unix 系统初始化进程的文件,主要用来设置系统初始化时运行的进程、终端、运行级别等。 + ```bash + cd userapps/apps/build/rootfs/etc/ + vim inittab + ``` + + 添加以下内容: + + ``` + # Mount Filesystem + ::sysinit:mkdir -p /dev/shm /dev/pts /proc /tmp /run /cmds + ::sysinit:mount -a + + # Run getty & login + console::respawn:-/bin/ash + + # using sshd + ::once:/bin/dropbear -F 2>/root/dropbear.log + ``` +5. **生成fat格式的文件系统**: + 选择FAT文件系统的原因是fat相对其他文件系统更加兼容、简单,特别适用于嵌入式系统和小型存储设备(如本教程中所使用的SD卡)。 + ```bash + cd userapps/apps + xmake smart-image -f fat + ``` + + 在build目录中生成 `fat.img`文件。 + + ``` + cd build/ + 拷贝fat.img文件到rt-thread/bsp/qemu-vexpress-a9目录中 + ``` + +## 3. 内核编译 +1. **拉取 RT-Thread 操作系统源码包** + + 执行以下指令来拉取 RT-Thread 源码库: + + ```bash + git clone https://github.com/RT-Thread/rt-thread.git + ``` + + 执行指令后,将会在当前目录下创建一个rt-thread目录,然后进入 `bsp/qemu-vexpress-a9` 目录: + + ```bash + cd rt-thread/bsp/qemu-vexpress-a9 + ``` + +2. **更新在线软件包,更新 pkgs** + ```bash + source ~/.env/env.sh + pkgs --update + ``` + +3. **编译内核** + + memuconfig可以通过键盘交互进行配置,它的主要作用是可以在配置选项中快速选择所需的功能,而不需要手动编辑配置文件,配置完之后,menuconfig 会生成一个 .config 文件,用于告诉编译器后续的编译过程。 + + ``` + scons --menuconfig + 选中:RT_USING_SMART + 以及:RT_IOREMAP_LATE + ``` + + 执行指令: + ```bash + scons -j8 + ``` + + 在当前目录中会生成编译后的 `rtthread.bin` 文件。 + + +4. **在qemu中验证** + + 1.**修改 `qemu` 运行脚本:** + 指定qemu模拟 ARM 架构的两核处理器,基于 ARM Cortex-A9 核心的开发板平台。-kernel 选项指定了要启动的内核映像文件及文件系统镜像。 + ```bash + vim qemu-nographic.sh + ``` + + 内容如下: + + ```bash + qemu-system-arm -M vexpress-a9 -smp cpus=2 -kernel rtthread.bin -nographic -sd fat.img + ``` + 2.**运行脚本:** + ```bash + ./qemu-nographic.sh + ``` + + 成功进入 `ash`界面,如下图所示: + + ![qemu_start.jpg](figures/qemu_start.jpg) + +## 4. 编写自己的应用程序 +1. **创建新的目录**: + 进入apps目录 + ```bash + cd userapps/apps + mkdir welcome + ``` +2. **创建 C 文件和 `xmake.lua`文件:** + - **编写 `main.c`:** + + ```bash + vim welcome/main.c + ``` + 内容如下: + ``` + #include + + int main(int argc, char **argv) + { + printf("Welcome to RT-Thread!\n"); + + return 0; + } + ``` + + - **编写 `xmake.lua`:** + 指定项目的构建目标,定义这些目标如何依赖源代码文件、头文件、库等。使xmake 知道如何将源代码文件编译成二进制可执行文件或库文件。 + + ```bash + vim welcome/xmake.lua + ``` + 内容如下: + + ```lua + add_rules("mode.debug", "mode.release") + + target("welcome") + do + add_files("*.c") + end + target_end() + ``` +3. **重新编译**:因为编写了新的应用程序,所以重新编译uesrapps生成新的文件系统镜像。 + ```bash + xmake smart-rootfs + xmake smart-image -f fat + ``` +4. **在 `build` 目录中会重新生成 img 镜像文件**,拷贝到bsp目录。 + ``` + cd build/ + cp fat.img rt-thread/bsp/qemu-vexpress-a9 + ``` +5. **进入bsp目录并运行qemu启动脚本**。 + ```bash + cd rt-thread/bsp/qemu-vexpress-a9 + ./qemu-nographic.sh + ``` + ![app_show.jpg](figures/app_show.jpg) + + 在qemu中启动,成功运行了我们编写的welcome应用程序。 + +## 5. 烧录映像并在开发板中运行 + +1. **生成 `fat.img` 文件后,插入 SD 卡**: + 插入sd卡前lsblk,查看当前所有的sdx设备 + ```bash + lsblk + ``` + 插入后再次lsblk,多出的sd设备就是该sd卡 + +2. **格式化 SD 卡指定分区为 fat 格式:** + + ```bash + sudo mkfs.vfat -F 32 /dev/<插入的设备分区> + ``` + +3. **烧录 `fat.img` 文件**: + + 在userapps/apps/build目录下 + ```bash + sudo dd if=fat.img of=/dev/<插入的设备分区> bs=4M status=progress + ``` + +4. **内核编译**,git下rt-thread文件后进入 `imx6ull-smart` 目录,其他操作同 QEMU 步骤: + + ```bash + cd rt-thread/bsp/nxp/imx/imx6ull-smart/ + ``` + + **配置内核后,修改mnt.c文件**,该文件位置在rt-thread/bsp/nxp/imx/imx6ull-smart/applications/mnt.c + + ``` + vim rt-thread/bsp/nxp/imx/imx6ull-smart/applications/mnt.c + ``` + + ```c + int part_id = 0; + if (dfs_mount("emmc0", "/", "elm", 0, (void *)part_id) != 0) + { + if (dfs_mount("sd0", "/", "elm", 0, (void *)part_id) != 0) + { + rt_kprintf("Dir / mount failed!\n"); + return -1; + } + else + rt_kprintf("sd0 file system initialization done!\n"); + } + else + { + rt_kprintf("emmc file system initialization done!\n"); + } + ``` + + 修改“emmc0"为自己烧录的sd卡分区,sd0对应第一个分区,sd1对应第二个分区,以此类推。 + +5. **编译后生成 `rtthread.bin` 文件,并使用 TFTP 烧录到开发板**: + + ```bash + setenv ipaddr 10.23.8.195; setenv serverip 10.23.8.124; tftp 0x80001000 rtthread.bin; dcache flush; go 0x80001000 + ``` + + 在 uboot 中执行指令,随后成功进入 `ash`界面,如下图所示: + + ![ash.jpg](./figures/ash.jpg) + + 至此,开发板已正常完成烧录和运行。 + -- Gitee From 1f8d23cb5edcb894f3eec96caf2b7b7bf06dfd0f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=83=91=E8=8C=9E=E9=80=8D?= Date: Wed, 13 Nov 2024 18:11:08 -0800 Subject: [PATCH 08/10] =?UTF-8?q?ART-Pi=20Smart=20=E5=BC=80=E5=8F=91?= =?UTF-8?q?=E6=9D=BF=E7=94=A8=E6=88=B7=E9=95=9C=E5=83=8F=E7=83=A7=E5=BD=95?= =?UTF-8?q?=E8=AF=B4=E6=98=8E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...47\345\275\225\350\257\264\346\230\216.md" | 256 ------------------ 1 file changed, 256 deletions(-) delete mode 100755 "rt-thread-version/rt-thread-smart/quick-start/artpi-smart/ART-Pi\347\203\247\345\275\225\350\257\264\346\230\216.md" diff --git "a/rt-thread-version/rt-thread-smart/quick-start/artpi-smart/ART-Pi\347\203\247\345\275\225\350\257\264\346\230\216.md" "b/rt-thread-version/rt-thread-smart/quick-start/artpi-smart/ART-Pi\347\203\247\345\275\225\350\257\264\346\230\216.md" deleted file mode 100755 index 04279cc..0000000 --- "a/rt-thread-version/rt-thread-smart/quick-start/artpi-smart/ART-Pi\347\203\247\345\275\225\350\257\264\346\230\216.md" +++ /dev/null @@ -1,256 +0,0 @@ -# ART-Pi Smart 开发板用户镜像烧录说明 - -## 1. 制作根文件系统 -1. **拉取 [userapps仓库](https://github.com/RT-Thread/userapps)**: - - ```bash - git clone https://github.com/RT-Thread/userapps - ``` - - 在 `userapps` 目录中,将有如下文件: - - ![userapps.png](figures/userapps.png) - - - **apps**:存放应用程序代码,包管理文件夹及编译产物 - - **env.sh**:用于配置环境变量 - - **repo**:用于管理软件包的文件夹 -2. **配置环境**: - - ```bash - source env.sh - ``` -3. **拉取工具链和编译根文件系统**: - - ```bash - cd apps - xmake f -a arm - xmake - xmake smart-rootfs - ``` -4. **写入 `inittab` 文件并放入 `rootfs` 目录**: - - ```bash - cd userapps/apps/build/rootfs/etc/ - vim inittab - ``` - - 添加以下内容: - - ``` - # Mount Filesystem - ::sysinit:mkdir -p /dev/shm /dev/pts /proc /tmp /run /cmds - ::sysinit:mount -a - - # Run getty & login - console::respawn:-/bin/ash - - # using sshd - ::once:/bin/dropbear -F 2>/root/dropbear.log - ``` -5. **生成 img 文件**: - - ```bash - cd userapps/apps - xmake smart-image -f fat - ``` - - 在build目录中生成 `fat.img`文件。 - - ``` - cd build/ - 拷贝fat.img文件到rt-thread/bsp/qemu-vexpress-a9目录中 - ``` - -## 2. 内核编译 -1. **拉取 RT-Thread 源码包** - - 执行以下指令来拉取 RT-Thread 源码库: - - ```bash - git clone https://github.com/RT-Thread/rt-thread.git - ``` - - 执行指令后,将会在当前目录下创建一个rt-thread目录,然后进入 `bsp/qemu-vexpress-a9` 目录: - - ```bash - cd rt-thread/bsp/qemu-vexpress-a9 - ``` -2. **编译内核** - - 配置内核 - - ``` - scons --menuconfig - ``` -3. **更新在线软件包,更新 pkgs** - ```bash - source ~/.env/env.sh - pkgs --update - ``` - ``` - 选中:RT_USING_SMART - 以及:RT_IOREMAP_LATE - ``` - - 执行指令: - ```bash - scons -j8 - ``` - - 在当前目录中会生成编译后的 `rtthread.bin` 文件。 - - -4. **在qemu中验证** - - 1.**安装qemu及arm环境** - - ```bash - sudo apt update - sudo apt install qemu qemu-system qemu-system-arm - ``` - 2.**修改 `qemu` 运行脚本:** - - ```bash - vim qemu-nographic.sh - ``` - - 内容如下: - - ```bash - qemu-system-arm -M vexpress-a9 -smp cpus=2 -kernel rtthread.bin -nographic -sd fat.img - ``` - 3.**运行脚本:** - ```bash - ./qemu-nographic.sh - ``` - - 成功进入 `ash`界面,如下图所示: - - ![qemu_start.jpg](figures/qemu_start.jpg) - -## 3. 编写自己的应用程序 -1. **创建新的目录**: - 进入apps目录 - ```bash - cd userapps/apps - mkdir welcome - ``` -2. **创建 C 文件和 `xmake.lua`文件:** - - **编写 `main.c`:** - - ```bash - vim welcome/main.c - ``` - 内容如下: - ``` - #include - - int main(int argc, char **argv) - { - printf("Welcome to RT-Thread!\n"); - - return 0; - } - ``` - - - **编写 `xmake.lua`:** - - ```bash - vim welcome/xmake.lua - ``` - 内容如下: - - ```lua - add_rules("mode.debug", "mode.release") - - target("welcome") - do - add_files("*.c") - end - target_end() - ``` -3. **重新编译**: - ```bash - xmake smart-rootfs - xmake smart-image -f fat - ``` -4. **在 `build` 目录中会重新生成 img 镜像文件**,拷贝到bsp目录。 - ``` - cd build/ - cp fat.img rt-thread/bsp/qemu-vexpress-a9 - ``` -5. **进入bsp目录并运行qemu启动脚本**。 - ```bash - cd rt-thread/bsp/qemu-vexpress-a9 - ./qemu-nographic.sh - ``` - ![app_show.jpg](figures/app_show.jpg) - -## 4. 烧录img文件到sd卡 - -1. **生成 `fat.img` 文件后,插入 SD 卡**: - 插入sd卡前lsblk,查看当前所有的sdx设备 - ```bash - lsblk - ``` - 插入后再次lsblk,多出的sd设备就是该sd卡 - -2. **格式化 SD 卡指定分区为 fat 格式:** - - ```bash - sudo mkfs.vfat -F 32 /dev/<插入的设备分区> - ``` - -3. **烧录 `fat.img` 文件**: - - 在userapps/apps/build目录下 - ```bash - sudo dd if=fat.img of=/dev/<插入的设备分区> bs=4M status=progress - ``` - -## 5. 在开发板中运行 - -1. **内核编译**,git下rt-thread文件后进入 `imx6ull-smart` 目录,其他操作同 QEMU 步骤: - - ```bash - cd rt-thread/bsp/nxp/imx/imx6ull-smart/ - ``` - - **配置内核后,修改mnt.c文件**,该文件位置在rt-thread/bsp/nxp/imx/imx6ull-smart/applications/mnt.c - - ``` - vim rt-thread/bsp/nxp/imx/imx6ull-smart/applications/mnt.c - ``` - - ```c - int part_id = 0; - if (dfs_mount("emmc0", "/", "elm", 0, (void *)part_id) != 0) - { - if (dfs_mount("sd0", "/", "elm", 0, (void *)part_id) != 0) - { - rt_kprintf("Dir / mount failed!\n"); - return -1; - } - else - rt_kprintf("sd0 file system initialization done!\n"); - } - else - { - rt_kprintf("emmc file system initialization done!\n"); - } - ``` - - 修改“emmc0"为自己烧录的sd卡分区,sd0对应第一个分区,sd1对应第二个分区,以此类推。 - -2. **编译后生成 `rtthread.bin` 文件,并使用 TFTP 烧录到开发板**: - - ```bash - setenv ipaddr 10.23.8.195; setenv serverip 10.23.8.124; tftp 0x80001000 rtthread.bin; dcache flush; go 0x80001000 - ``` - - 在 uboot 中执行指令,随后成功进入 `ash`界面,如下图所示: - - ![ash.jpg](./figures/ash.jpg) - - 至此,开发板已正常完成烧录和运行。 - -- Gitee From 075d9d876b4d515d5ae71b93065da41a9dcc3847 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=83=91=E8=8C=9E=E9=80=8D?= Date: Fri, 15 Nov 2024 16:34:38 +0800 Subject: [PATCH 09/10] =?UTF-8?q?ART-Pi=20Smart=20=E5=BF=AB=E9=80=9F?= =?UTF-8?q?=E4=B8=8A=E6=89=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- rt-thread-version/rt-thread-smart/_sidebar.md | 1 + 1 file changed, 1 insertion(+) diff --git a/rt-thread-version/rt-thread-smart/_sidebar.md b/rt-thread-version/rt-thread-smart/_sidebar.md index 3a04abe..8526fba 100644 --- a/rt-thread-version/rt-thread-smart/_sidebar.md +++ b/rt-thread-version/rt-thread-smart/_sidebar.md @@ -9,6 +9,7 @@ - 快速上手 - [QEMU快速上手(Win)](/rt-thread-version/rt-thread-smart/quick-start/qemu-win/quickstart.md) - [QEMU快速上手(Linux)](/rt-thread-version/rt-thread-smart/quick-start/qemu-linux/quickstart.md) + - [ART-Pi Smart快速上手](/rt-thread-version/rt-thread-smart/quick-start/artpi-smart/ART-Pi Smart 快速上手.md) - 设备和驱动 - [DevFS设备管理](/rt-thread-version/rt-thread-smart/device/DevFS/DevFS.md) - [设备树使用](/rt-thread-version/rt-thread-smart/device/device-tree/device-tree.md) -- Gitee From 6e6767741a0624a862b3388cd8174004bbe7344c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=83=91=E8=8C=9E=E9=80=8D?= Date: Fri, 15 Nov 2024 16:37:11 +0800 Subject: [PATCH 10/10] =?UTF-8?q?ART-Pi=20Smart=20=E5=BF=AB=E9=80=9F?= =?UTF-8?q?=E4=B8=8A=E6=89=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- rt-thread-version/rt-thread-smart/_sidebar.md | 2 +- .../quick-start/artpi-smart/quickstart.md | 270 ++++++++++++++++++ 2 files changed, 271 insertions(+), 1 deletion(-) create mode 100755 rt-thread-version/rt-thread-smart/quick-start/artpi-smart/quickstart.md diff --git a/rt-thread-version/rt-thread-smart/_sidebar.md b/rt-thread-version/rt-thread-smart/_sidebar.md index 8526fba..1cba969 100644 --- a/rt-thread-version/rt-thread-smart/_sidebar.md +++ b/rt-thread-version/rt-thread-smart/_sidebar.md @@ -9,7 +9,7 @@ - 快速上手 - [QEMU快速上手(Win)](/rt-thread-version/rt-thread-smart/quick-start/qemu-win/quickstart.md) - [QEMU快速上手(Linux)](/rt-thread-version/rt-thread-smart/quick-start/qemu-linux/quickstart.md) - - [ART-Pi Smart快速上手](/rt-thread-version/rt-thread-smart/quick-start/artpi-smart/ART-Pi Smart 快速上手.md) + - [ART-Pi Smart快速上手](/rt-thread-version/rt-thread-smart/quick-start/artpi-smart/quickstart.md) - 设备和驱动 - [DevFS设备管理](/rt-thread-version/rt-thread-smart/device/DevFS/DevFS.md) - [设备树使用](/rt-thread-version/rt-thread-smart/device/device-tree/device-tree.md) diff --git a/rt-thread-version/rt-thread-smart/quick-start/artpi-smart/quickstart.md b/rt-thread-version/rt-thread-smart/quick-start/artpi-smart/quickstart.md new file mode 100755 index 0000000..88806c6 --- /dev/null +++ b/rt-thread-version/rt-thread-smart/quick-start/artpi-smart/quickstart.md @@ -0,0 +1,270 @@ +# ART-Pi Smart 快速上手 + 本文将引导您如何快速上手ART-Pi Smart,从头开始构建RT-Smart实时操作系统,涵盖制作根文件系统、内核编译、应用程序开发、烧录和在开发板中运行的完整流程。 + +## 1. 系统环境 +1. **操作系统**: + 建议使用 Ubuntu20.04 发行版,确保系统能够顺利运行所有相关工具。 + 安装基本的开发工具包: + + ```bash + sudo apt update + sudo apt install build-essential + ``` +2. **依赖工具**: + 安装所需的开发工具,如 Git、Make、QEMU 等: + + ```bash + sudo apt install git make gcc g++ qemu qemu-system qemu-system-arm tftp vim python3 python3-pip curl libncurses5-dev + ``` + + +## 2. 制作根文件系统 +1. **拉取 [userapps仓库](https://github.com/RT-Thread/userapps)**: + userapps仓库包含了一些应用程序和配置文件,能够快速生成根文件系统,并为 RT-Thread 操作系统构建所需的应用程序。 + ```bash + git clone https://github.com/RT-Thread/userapps + ``` + + 在 `userapps` 目录中,将有如下文件: + + ![userapps.png](figures/userapps.png) + + - **apps**:存放应用程序代码,包管理文件夹及编译产物 + - **env.sh**:用于配置环境变量 + - **repo**:用于管理软件包的文件夹 +2. **配置环境**: + + ```bash + source env.sh + ``` +3. **拉取工具链和编译根文件系统**: + 为了编译 ARM 目标平台上的代码,您需要下载并安装 ARM 交叉编译工具链。可以选择使用 arm-linux-musleabi 工具链: + + ```bash + cd apps + xmake f -a arm + xmake + xmake smart-rootfs + ``` +4. **写入 `inittab` 文件并放入 `rootfs` 目录**: + inittab 文件是一个用于配置 Linux 系统或类 Unix 系统初始化进程的文件,主要用来设置系统初始化时运行的进程、终端、运行级别等。 + ```bash + cd userapps/apps/build/rootfs/etc/ + vim inittab + ``` + + 添加以下内容: + + ``` + # Mount Filesystem + ::sysinit:mkdir -p /dev/shm /dev/pts /proc /tmp /run /cmds + ::sysinit:mount -a + + # Run getty & login + console::respawn:-/bin/ash + + # using sshd + ::once:/bin/dropbear -F 2>/root/dropbear.log + ``` +5. **生成fat格式的文件系统**: + 选择FAT文件系统的原因是fat相对其他文件系统更加兼容、简单,特别适用于嵌入式系统和小型存储设备(如本教程中所使用的SD卡)。 + ```bash + cd userapps/apps + xmake smart-image -f fat + ``` + + 在build目录中生成 `fat.img`文件。 + + ``` + cd build/ + 拷贝fat.img文件到rt-thread/bsp/qemu-vexpress-a9目录中 + ``` + +## 3. 内核编译 +1. **拉取 RT-Thread 操作系统源码包** + + 执行以下指令来拉取 RT-Thread 源码库: + + ```bash + git clone https://github.com/RT-Thread/rt-thread.git + ``` + + 执行指令后,将会在当前目录下创建一个rt-thread目录,然后进入 `bsp/qemu-vexpress-a9` 目录: + + ```bash + cd rt-thread/bsp/qemu-vexpress-a9 + ``` + +2. **更新在线软件包,更新 pkgs** + ```bash + source ~/.env/env.sh + pkgs --update + ``` + +3. **编译内核** + + memuconfig可以通过键盘交互进行配置,它的主要作用是可以在配置选项中快速选择所需的功能,而不需要手动编辑配置文件,配置完之后,menuconfig 会生成一个 .config 文件,用于告诉编译器后续的编译过程。 + + ``` + scons --menuconfig + 选中:RT_USING_SMART + 以及:RT_IOREMAP_LATE + ``` + + 执行指令: + ```bash + scons -j8 + ``` + + 在当前目录中会生成编译后的 `rtthread.bin` 文件。 + + +4. **在qemu中验证** + + 1.**修改 `qemu` 运行脚本:** + 指定qemu模拟 ARM 架构的两核处理器,基于 ARM Cortex-A9 核心的开发板平台。-kernel 选项指定了要启动的内核映像文件及文件系统镜像。 + ```bash + vim qemu-nographic.sh + ``` + + 内容如下: + + ```bash + qemu-system-arm -M vexpress-a9 -smp cpus=2 -kernel rtthread.bin -nographic -sd fat.img + ``` + 2.**运行脚本:** + ```bash + ./qemu-nographic.sh + ``` + + 成功进入 `ash`界面,如下图所示: + + ![qemu_start.jpg](figures/qemu_start.jpg) + +## 4. 编写自己的应用程序 +1. **创建新的目录**: + 进入apps目录 + ```bash + cd userapps/apps + mkdir welcome + ``` +2. **创建 C 文件和 `xmake.lua`文件:** + - **编写 `main.c`:** + + ```bash + vim welcome/main.c + ``` + 内容如下: + ``` + #include + + int main(int argc, char **argv) + { + printf("Welcome to RT-Thread!\n"); + + return 0; + } + ``` + + - **编写 `xmake.lua`:** + 指定项目的构建目标,定义这些目标如何依赖源代码文件、头文件、库等。使xmake 知道如何将源代码文件编译成二进制可执行文件或库文件。 + + ```bash + vim welcome/xmake.lua + ``` + 内容如下: + + ```lua + add_rules("mode.debug", "mode.release") + + target("welcome") + do + add_files("*.c") + end + target_end() + ``` +3. **重新编译**:因为编写了新的应用程序,所以重新编译uesrapps生成新的文件系统镜像。 + ```bash + xmake smart-rootfs + xmake smart-image -f fat + ``` +4. **在 `build` 目录中会重新生成 img 镜像文件**,拷贝到bsp目录。 + ``` + cd build/ + cp fat.img rt-thread/bsp/qemu-vexpress-a9 + ``` +5. **进入bsp目录并运行qemu启动脚本**。 + ```bash + cd rt-thread/bsp/qemu-vexpress-a9 + ./qemu-nographic.sh + ``` + ![app_show.jpg](figures/app_show.jpg) + + 在qemu中启动,成功运行了我们编写的welcome应用程序。 + +## 5. 烧录映像并在开发板中运行 + +1. **生成 `fat.img` 文件后,插入 SD 卡**: + 插入sd卡前lsblk,查看当前所有的sdx设备 + ```bash + lsblk + ``` + 插入后再次lsblk,多出的sd设备就是该sd卡 + +2. **格式化 SD 卡指定分区为 fat 格式:** + + ```bash + sudo mkfs.vfat -F 32 /dev/<插入的设备分区> + ``` + +3. **烧录 `fat.img` 文件**: + + 在userapps/apps/build目录下 + ```bash + sudo dd if=fat.img of=/dev/<插入的设备分区> bs=4M status=progress + ``` + +4. **内核编译**,git下rt-thread文件后进入 `imx6ull-smart` 目录,其他操作同 QEMU 步骤: + + ```bash + cd rt-thread/bsp/nxp/imx/imx6ull-smart/ + ``` + + **配置内核后,修改mnt.c文件**,该文件位置在rt-thread/bsp/nxp/imx/imx6ull-smart/applications/mnt.c + + ``` + vim rt-thread/bsp/nxp/imx/imx6ull-smart/applications/mnt.c + ``` + + ```c + int part_id = 0; + if (dfs_mount("emmc0", "/", "elm", 0, (void *)part_id) != 0) + { + if (dfs_mount("sd0", "/", "elm", 0, (void *)part_id) != 0) + { + rt_kprintf("Dir / mount failed!\n"); + return -1; + } + else + rt_kprintf("sd0 file system initialization done!\n"); + } + else + { + rt_kprintf("emmc file system initialization done!\n"); + } + ``` + + 修改“emmc0"为自己烧录的sd卡分区,sd0对应第一个分区,sd1对应第二个分区,以此类推。 + +5. **编译后生成 `rtthread.bin` 文件,并使用 TFTP 烧录到开发板**: + + ```bash + setenv ipaddr 10.23.8.195; setenv serverip 10.23.8.124; tftp 0x80001000 rtthread.bin; dcache flush; go 0x80001000 + ``` + + 在 uboot 中执行指令,随后成功进入 `ash`界面,如下图所示: + + ![ash.jpg](./figures/ash.jpg) + + 至此,开发板已正常完成烧录和运行。 + -- Gitee