前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >VVの嵌入式(一)开发环境搭建

VVの嵌入式(一)开发环境搭建

作者头像
Pulsar-V
发布2019-08-08 09:33:25
1.3K0
发布2019-08-08 09:33:25
举报
文章被收录于专栏:Pulsar-V

交叉编译系统的搭建

平台:Ubuntu32位虚拟机 目标平台:海思Hi3559V100 工欲善其事必先利其器,在进行嵌入式linux开发的时候需要搭建一个能够调试的环境,在电脑上无疑是最好最方便的了。至于虚拟机怎么搭建就不多说了,这里我用的32位的Ubuntu16.04主要是方便编译之前文章中自己写的OS 首先安装aarch64-linux-gnu工具链

代码语言:javascript
复制
apt-cache search aarch64-linux-gnu-gcc 

接下来选择一个你需要的gcc版本就可以了 刚开始的时候使用的GCC版本稍微低一点,避免出现因为版本过新导致的故障。

代码语言:javascript
复制
sudo apt-get install gcc-4.9-aarch64-linux-gnu-gcc

模拟器环境的搭建

对于一个烧录都好半个小时乃至一个小时的系统来说debug一次真的真的太心累了,直接是对人的折磨,所以虚拟机是非常有必要的,arm环境的模拟器用的qemu,还是老样子直接安装就好了。

代码语言:javascript
复制
sudo apt-get install qemu qemu-user-static

然后开始着手模拟一个base ubuntu的arm64环境 首先下载rootfs

代码语言:javascript
复制
mkdir ~/rootfs && cd ~/rootfs
wget http://cdimage.ubuntu.com/ubuntu-base/releases/16.04.1/release/ubuntu-base-16.04.2-base-arm64.tar.gz
mkdir ubuntu-rootfs
tar -xvf ubuntu-base-16.04.2-base-arm64.tar.gz -C ubuntu-rootfs
cd ubuntu-rootfs
ls

把qemu的静态模拟器放到根目录下面去

代码语言:javascript
复制
cp /usr/bin/qemu-aarch64-static  usr/bin
cp -b /etc/resolv.conf etc/

写一个用来挂载分区的bash shell,内容如下:

代码语言:javascript
复制
#!/bin/bash
function mount() {
    echo "MOUNTING"
    sudo mount -t proc /proc ${2}proc
    sudo mount -t sysfs /sys ${2}sys
    sudo mount -o bind /dev ${2}dev
    sudo mount -o bind /dev/pts ${2}dev/pts		
    sudo chroot ${2}
}
function umount() {
    echo "UNMOUNTING"
    sudo umount ${2}proc
    sudo umount ${2}sys
    sudo umount ${2}dev/pts
    sudo umount ${2}dev
}
if [ "$1" == "-m" ] && [ -n "$2" ] ;
then
    mount $1 $2
elif [ "$1" == "-u" ] && [ -n "$2" ];
then
    umount $1 $2
else
    echo ""
    echo "第1个参数和第2个参数都是必要参数"
    echo ""
    echo "第1个参数为-m时候为挂载、为-u的时候为卸载"
    echo "第二个参数表示需要挂载的根文件目录)"
    echo ""
    echo ".eg: ch-mount -m ./workspace/rootfs/"
    echo ""
    echo 1st parameter : ${1}
    echo 2nd parameter : ${2}
fi

通过ch-mount.sh脚本chroot到arm64的文件系统下

代码语言:javascript
复制
./ch-mount.sh -m ubuntu-rootfs

这个时候就进来到虚拟机的根目录下面来了,此时arm64的文件也能执行了

(我这里是用windows去连接ubuntu linux的虚拟机的,在linux下执行也是同样的道理) 此时需要配置一下基本的工具环境

代码语言:javascript
复制
apt-get install net-tools network-manager openssh-server

注意:openssh-server工具很重要,在没有屏幕的情况下使用开发板没有ssh连接就是一摸黑

添加用户、组合密码

代码语言:javascript
复制
passwd yourusername
passwd root

你要是嫌麻烦可以直接把你的虚拟机的shadow、group、passwd三个文件直接复制到目标arm linux的/etc文件夹里面

代码语言:javascript
复制
sudo cp /etc/{shadow,group,passwd} /workspace/ubuntu-rootfs/etc

设置主机名

代码语言:javascript
复制
echo 'ubuntu.arm64' > /etc/hostname

海思的到此结束了,因为串口输出也不是这里输出的,直接跳到下一步,海思的ubuntu系统修改后面我会给出,基本上到此为止的东西只需要复制到海思的目标板上去不覆盖原有的就行了,因为海思板子是官方给的busybox的,所以整起来有点麻烦。 其他ARM64的板子继续

配置登录的串口

因为暂时未安装桌面,所以这里的配置要具体和内核中登录的串口的设备对应起来,不然对导致无法通过串口登录的问题。 在 /etc/init/ 下添加或修改ttyS0.conf

代码语言:javascript
复制
start on stopped rc or RUNLEVEL=[12345]
stop on RUNLEVEL [!12345]
respawn
exec /sbin/getty -L 115200 tty000 vt102

白板上别忘了在/etc/prifile里写

代码语言:javascript
复制
echo "Start SSH server"
/usr/bin/sshd

这里我的登录串口为tty000,因为不同板子有所差异,我ZYNQ的板子是ttyACM0.所以还是要根据板子进行调整。

制作固件

退出arm64模拟文件系统

代码语言:javascript
复制
exit
./ch-mount -u ubuntu-rootfs

这里有两种操作任选一个都可以

1.使用make_ext4fs生成可烧录的固件.ext4文件

代码语言:javascript
复制
make_ext4fs -s -l 1024M rootfs.ext4 ./rootfs

关于make_ext4fs各参数的含义

形如make_ext4fs -s -l 314572800 -a root -L linux ./rootfs_qt.img ./root

make_ext4fs [ -l <len> ] [ -j <journal size> ] [ -b <block_size> ] [ -g <blocks per group> ] [ -i <inodes> ] [ -I <inode size> ] [ -L <label> ] [ -f ] [ -a <android mountpoint> ] [ -z | -s ] [ -J ] <filename> [<directory>]

  • -s 就是生成ext4的S模式制作;
  • -l 314572800 是分区大小;
  • -a root 是指这个img用于Linux系统(若为-a system即表示为android系统,挂载点即是/system。使用这个参数,make_ext4fs会根据private/android_filesystem_config.h里定义好的权限来给文件夹里的所有文件重新设置权限,如果你刷机以后发现有文件权限不对,可以手工修改android_filesystem_config.h来添加权限,重新编译make_ext4fs,也可以不使用 “-a system”参数,这样就会使用文件的默认权限)。
  • ./rootfs_qt.img 表示在当前目录下生成镜像文件。
  • ./root 指定源路径。

2.使用dd指令制作空的固件容器.img文件

代码语言:javascript
复制
dd if=/dev/zero of=ubuntu-rootfs.img bs=1M count=2048
sudo  mkfs.ext4  ubuntu-rootfs.img

将arm64文件系统内容制作到ubuntu-rootfs.img

代码语言:javascript
复制
mkdir  ubuntu-mount
sudo mount ubuntu-rootfs.img ubuntu-mount/
sudo cp -rfp ubuntu-rootfs/*  ubuntu-mount/
sudo umount ubuntu-mount/
e2fsck -p -f ubuntu-rootfs.img
resize2fs -M ubuntu-rootfs.img

打开你的板子不出意外远程ssh也可以连接了

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 交叉编译系统的搭建
  • 模拟器环境的搭建
    • 添加用户、组合密码
      • 配置登录的串口
      • 制作固件
      • 1.使用make_ext4fs生成可烧录的固件.ext4文件
        • 关于make_ext4fs各参数的含义
        • 2.使用dd指令制作空的固件容器.img文件
        相关产品与服务
        文件存储
        文件存储(Cloud File Storage,CFS)为您提供安全可靠、可扩展的共享文件存储服务。文件存储可与腾讯云服务器、容器服务、批量计算等服务搭配使用,为多个计算节点提供容量和性能可弹性扩展的高性能共享存储。腾讯云文件存储的管理界面简单、易使用,可实现对现有应用的无缝集成;按实际用量付费,为您节约成本,简化 IT 运维工作。
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档