Hi3518鸿蒙手动修改文件系统增加shell 原创
文中相关设备来源于51CTO 鸿蒙技术社区【开发板漂流计划】
接上篇Hi3518鸿蒙运行没有shell问题
自己功能代码编译始终没有shell,启动报错如下:
[Init] start service shell invalid, please check /bin/shell.
[Init] StartServiceByName, service shell start failed!
后来我没有先从代码层面去解决,这个错误说明目录bin下没有shell可执行程序,我去out目录下查看bin目录下确实没有shell,我就想我从官方下载的固件是成功的,于是我把官网目录下的shell拷贝到自己的rootfs目录下,自己重新打包一个文件系统img文件不就行了。
搜索了一下可以通过用mkfs.jffs2 命令制作jffs2镜像文件
使用命令:
apt-get install mtd-utils
命令使用实例:
mkfs.jffs2 -s 0x1000 -e 0x40000 -p 0x500000 -d rootfs/ -o jffs2.img
说明:
页大小0x1000 4k
块大小0x40000 256k
jffs2分区总空间0x500000即5M
我生成jffs img文件时把分区总空间大小改成了7M,因为系统自动生成的就是7M
生成成功后用hitool重新烧录启动,居然报错:
想了几分钟,到底自己哪里设置错了,后来在启动信息看到Flash块大小为64K,而我用命令生成时候用的256K,然后查看参数说明默认是64K,于是去掉页大小和块大小的设置采用默认值,命令如下:
mkfs.jffs2 -p 0x700000 -d rootfs/ -o jffs2_64.img
重新生成后,烧录
然后查看启动信息:
[ERR][SendCmd,39] No such file or directory!
[Init] start service shell succeed, pid 3.
[Init] start service apphilogcat succeed, pid 4.
[Init] start service foundation succeed, pid 5.
[Init] start service bundle_daemon succeed, pid 6.
[Init] start service appspawn succeed, pid 7.
[Init] start service media_server succeed, pid 8.
[Init] start service hiview invalid, please check /bin/hiview.
[Init] StartServiceByName, service hiview start failed!
[Init] start service ai_server succeed, pid 9.
[ERR][SendCmd,39] No such file or directory!
[ERR][SendCmd,39] No such file or directory!
shell程序运行成功了,启动后可以出现shell交互:
但此时还是有问题,shell虽说可以了,但是没有支持的命令,猜想shell支持的命令也应该放到文件系统指定的目录下
后续再查问题从三方面着手:
1 看代码编译为什么没有把shell编译到文件系统中去
2 查看shell运行原理,搞清楚怎么shell怎么执行,怎么执行具体的命令交互
3 换一套代码不采用hpm的代码,并且重新编译烧录