0
一.前言
书接上文:fedara系统启动及homeassistant安装体验,这次终于把homeassistant跑起来的,这其中到底发生了些什么故事呢,且听我慢慢道来.
二.环境准备
上篇说了,跑homeassitant需要从头编译系统,所以先搭建编译环境吧,官方的git仓库在这:https://github.com/starfive-tech/freelight-u-sdk,啥也不说了,先down下来,提一下,官方说推荐编译环境是Ubuntu16.04或Ubuntu18.04,我这里用的是Ubuntu20.04,实际体验一点问题没有,所以朋友们放心大胆的玩吧.
因为里面包含了其他仓库,所以必须加--recursive,完整的方式如下:
温馨提示:输入完之后就可以去洗澡冲凉或者做饭去了 然后就是装一堆的依赖:sudo apt-get install autoconf automake autotools-dev bc bison xxd build-essential curl flex gawk gdisk git gperf libgmp-dev libmpc-dev libmpfr-dev libncurses-dev libssl-dev libtool patchutils python screen texinfo unzip zlib1g-dev device-tree-compiler libyaml-dev把这些完成咱们就可以到下一步了:
三.系统配置和编译把代码下完之后cd到仓库目录.然后还需要用下面这些指令配置一些东西$ cd buildroot && git checkout JH7100_VisionFive_devel && cd ..$ cd HiFive_U-Boot && git checkout JH7100_VisionFive_devel && cd ..$ cd linux && git checkout --track origin/visionfive-5.15.y-devel && cd ..$ cd opensbi && git checkout master && cd ..
然后就可以启动编译了:make HWBOARD=visionfive或者make visionfive
再次温馨提示:这步操作完就可以挂机去睡觉了,等明儿再弄吧
如果没有ERROR这样的字样就代表编译成功了,有ERROR的话就去查错吧.
再再温馨提示:请先预留20G+的磁盘空间
四,烧录固件
我这里采用的是sd卡方式,readme里面有NFS方式,无奈水平太菜没弄成功,把固件烧录到sd卡之前还需要这么一个步骤:
$ make HWBOARD=xxx -jx$ make HWBOARD=xxx buildroot_rootfs -jx$ make HWBOARD=xxx vpudriver-build-rootfs$ rm -rf work/buildroot_rootfs/images/rootfs.ext*$ make HWBOARD=xxx buildroot_rootfs -jx这里面的HWBOARD=xxx指的是前面的板子类型,其实这里可以省略掉完成这些之后,先找一张sd卡,推荐至少16G,完事将卡用读卡器接到电脑USB或者如果你电脑自带tf卡插槽的话直接怼里就行这里需要提前将sd卡格式化一下,参考这篇链接:https://wiki.rvspace.org/en/Prod ... r_Quick_Start_Guide等把卡格式话完成之后,执行这两条指令:umount /dev/sdb3umount /dev/sdb1
然后再用这条指令将固件烧录到卡里:
make HWBOARD=visionfive DISK=/dev/sdb format-nvdla-rootfs && sync
之后就是漫长的等待,我这边是10分钟以上吧,可以去冲杯咖啡先.
看到这样的信息就代表烧录成功了:
五.系统启动
系统成功烧录到卡之后就可以上电了,等上电完成之后可以看到熟悉的输入用户名和密码,这里输入root回车然后starfive回车,顺利的话就可以进入系统了,完事的话可以执行一些简单的指令,证明系统是好的
有朋友问了,这个用户名和密码太长了想改怎么办:用这条指令进入buildroot的配置界面:
make buildroot_rootfs-menuconfig
找到如下地方,可以选择把密码去掉或者改简单点,比如我改成了123456,
六,重新编译python,pip等
python其实系统中已经带了,默认3.9.0,其实够用,这里暂时不用改,需要在python的核心包里添加sqlite和xml等支持,
还是刚刚的menuconfig指令,在此界面配置即可,步骤截图如下:
然后重新编译python,重新编译python的方式如下:
先进入work下面的buildroot_rootfs目录:
在目录下面执行 make python3-dirclean && make python3_rebuild,等待片刻后即可编译成功
这里附上buildroot的文档地址: http://buildroot.uclibc.org/downloads/manual/manual.html
这些都完成之后,可以添加pip指令,如下图:
做完这些之后可以尝试先编一个系统看看生效没有:
回到sdk目录,执行以上那四条指令:
$ make HWBOARD=xxx buildroot_rootfs -jx$ make HWBOARD=xxx vpudriver-build-rootfs$ rm -rf work/buildroot_rootfs/images/rootfs.ext*$ make HWBOARD=xxx buildroot_rootfs -jx事实证明,只执行rm -rf work/buildroot_rootfs/images/rootfs.ext*和make HWBOARD=xxx vpudriver-build-rootfs这两条指令也够
之后就是添加homeassistant系统了
七.homeassistant系统编译
要编译homeassistant首先要在package里面配置homeassistant的包,我们在这个文件夹下添加python-homeassistant这个文件夹,然后添加3个文件:
做完这些步骤之后又回到work下面的buildroot_rootfs目录,执行指令:make python-homeassistant-rebuild指令,等待编译完成,编译完成之后可以在target/usr/bin下面看到一个文件叫hass,到这里homeassistant就编译完成了
八.编译homeassistant的依赖
到上面的步骤你以为homeassistant编译成功了吗,太天真了,由于homeassistant是python写的,
python有个最大的特点就是属于动态语言,很多包都是在运行的时候加载的,
所以homeassistant运行所需要的所有包都需要提前编译好,
查看homeassistant的requirements文件,发
到这里就要解释一下requiremtnets.txt文件了,我们到pypi网站上去找到homeassistant包,这里我选择一个历史版本,homeasssistant 2.21.8.8版本,
下载过来,打开压缩包,可以看到一个文件叫做requiremtnets.txt,这里面记载了所有的依赖,
那么这么多的依赖要如何处理呢,有两个方法,
方法一就是在buildroot下面有一个utils文件夹,里面有一个scanpypi的工具,使用这个工具可以很方便的集成一些包进来,但是这个工具经常会不好使,研究这个工具还专门花了好几个小时,最后发现机制有问题(最主要的是python依赖包的方式经常不一样)
方法二,这个方法比较简单,但是很繁琐,需要一个包一个包的处理,最后会在buildroot的packages目录下生成一大堆的python-xxx包,具体的过程文字描述比较费劲这里就不多讲了,给大家看一下我的构建history,
等把这些包全都弄完,快的话也得需要1天,这中间还会出现各种各样的错误,所以其中的辛酸曲折大家能体会了.
把这些都弄完之后又回到sdk的目录下面指令构建的那两条指令,完事之后就烧到sd卡
九,启动homeassistant
如果一切顺利的话,等系统启动成功之后,输入hass指令,就能看到hass可以启动了,第一次启动会花费不少时间,这是因为虽然我们已经构建了很多包,但是都是大包,有很多小的包还是需要他在运行的时候自己下载安装,等这些都ok了之后,打开你的浏览器,输入你的 开发板ip后跟端口8123,比如我的开发板用网线连接,系统启动之后自动获得ip是:192.168.1.7,那我在浏览器输入:192.168.1.7:8123,顺利的话就能看到homeassistant的主界面了,这里截图一下,
在浏览器里面设置你的用户名,密码等等,然后还有些其他的设置,就能进到homeassistant了,到这里,homeassistant就做完了.
十.总结
编译整个homeassistant的过程是痛苦的,期间有好几次想放弃,因为实在是太耽误时间了,而且因为对开发板的编译构建方式不熟悉,仅tf卡烧录这些步骤就花了很多时间,但就像有一句话说的,得不到的永远在骚动,从小的教育告诉我做事情不能轻言放弃,这么多年的工作经历告诉我,有时候成功就差再努力那么一下,再想到赛昉对我的信任(由于错过第一波的申请,到我申请的时候就剩3个名额了,但是依然申请到了),带着这一份承诺和执着,终于还是做成功了,结果不光是学到了技术,感觉更是对自己心志的一次磨炼.再次感谢赛昉,感谢发烧友平台.
|
|