Q2. 如何登录模拟器,并向模拟器中拷贝文件、从模拟器中拷贝文件?
Q3. 点击“SyberOS-2.0.0.build24-SDK-20150814.run”文件安装SDK报错,错误信息如下所示
Q6. Ubuntu系统安装搜狗输入法后,SyberOS IDE中还是无法输入中文。
Q8. SyberOS SDK工程的父级目录结构中不能含有中文字符,否则可能会出现一些错误情况。
Q9. SyberOS IDE选择在“Device”上构建运行,点击运行按钮时,编译输出框中报“ins-tool:Error ===== 签名验证失败”?
Q10. 执行“ssh developer@192.168.100.100”命令报错,如何解决?
Q11. 文件可以安装到$$INS_DIR目录下,但是不能安装到$$DATA_DIR目录下。
Q13. SyberOS IDE开发的无界面程序,如何从命令行启动?
Q18. 双系统手机上如何访问虹膜,打开虹膜摄像头?红外灯如何点亮?
Q19.安装完paltfromSDK,执行sdk enter命令报没有sdk命令。
Q21. 工程项目包括多个子目录时(每个子目录中都包含pro),该工程项目的pro文件该如何写?如何控制子目录的编译顺序?
Q25. SyberOS SDK中编译时缺少包,怎么手动在SyberOS SDK中安装包?
Q26. 使用platfromSDK编译出的可执行程序,如何在手机中通过gdb调试?
Q27. 使用platfromSDK编译出的rpm包,如何在手机中通过gdb调试?
Q28. 手机中coredump文件放置的位置,根据core如何进行调试?
Q30. 怎么在PlantFrom SDK环境中,直接使用gcc编译程序?
Q31. SyberOS SDK环境中运行程序,报“未知安装错误”。
Q34. 应用的配置文件(该文件后续需要被修改)应该放在什么位置?
Q35. 模拟器中部署运行程序报错“无法连接主机:密钥被服务器拒绝”。
Q39. 如何让应用在锁屏的时候也能够直接弹出,通话过程中如何禁止锁屏?
Q41. Windows上如何查看SDK Ide帮助部分提供的文档内容?
Q44. 录音(QAudioRecord)完成后,如何获取声音文件存储完成事件?
Q47. 高版本VirtualBox导致sdk模拟器中按键盘上的“Esc”键、Home键及“空格键”不起作用。
Q49. 一些开源的C++库如何编译才能在SyberOS开发的程序中使用?
Q50. 如何查看新版本PDK当前默认使用的是哪个target?
Q51. 使用SDK新建工程时,新建选项中的“元心SOP应用项目”与“Application”有什么区别?
Q53. PDK中增加zypper源后,更新zypper源出错。
Q54. 应用程序可以通过IDE启动,也可以通过sdk-invoker命令启动,但点击桌面图标却无法启动。
Q57. spec文件中怎么打印log?rpmbuild命令怎么定义宏,并在spec文件中使用?
本文档记录了技术支持过程中客户遇到的一些问题,希望能帮助后续的技术支持人员及开发人员开速的定位解决客户问题。
A:
(一)连接手机
在命令行执行 ssh developer@192.168.100.100 命令,即可登录手机。
注:如果ubuntu系统是通过vmware安装在Windows机器中的,首先需要按照下图的配置进行操作。
(二)向手机中拷贝文件
可通过下面两种方式向手机中拷贝文件:
方式一:命令行执行下面命令,成功后文件放置在手机中的/data/developer目录下
Q1. 如何连接手机,并向手机中拷贝文件?
scp source developer@192.168.100.100:/data/developer
方式二:
登录模拟器:
ssh -p 5555 developer@localhost
注意,密码为“system”,登录模拟器后,可以执行su切换到root用户,su对应用密码也为“system”,即模拟器中需要输入密码的情况,密码均为“system”。
以下命令均在本地主机命令行下执行。
向模拟器中拷贝文件:
scp -P 5555 xxx developer@localhost:/data/developer/
从模拟器中拷贝文件:
scp -P 5555 developer@localhost:/data/developer/xxx .
A:因“SyberOS-2.0.0.build24-SDK-20150814.run”程序无执行权限导致的运行报错。请在命令行执行如下命令,为该文件添加执行权限:
chmod a+x SyberOS-2.0.0.build24-SDK-20150814.run
A:未安装expect包。请执行如下命令安装expect包:
sudo dpkg -i expect_5.45-5ubuntu1_amd64.deb
A:使用SyberOS IDE打开工程前,将工程目录下的XXX.pro.user文件删除,然后再打开工程;如果在删除XXX.pro.user文件前已经打开工程,那么需要先将工程关闭,然后删除工程目录下的XXX.pro.user文件,最后再打开工程构建即可。
A:找到SyberOS-SDK安装路径,打开“SyberOS-SDK/ide/bin/qtcSyberIDE”文件,注释掉“export QT_IM_MODULE=ibus”,取消注释“#export QT_IM_MODULE=fcitx”,然后重启SyberOS IDE。
A:
HEADERS += src/mylib.h //mylib.h是库中的头文件
LIBS += -L$$PWD/libDir -lmyLib //myLib是动态库的名称
QMAKE_RPATHDIR = $$INS_DIR/libDir
libs.files = libDir
libs.path = $$INS_DIR/
INSTALLS += libs
#include "mylib.h"
......
TestLibCallWorkspace::TestLibCallWorkspace()
: CWorkspace()
{
m_view = SYBEROS::SyberosGuiCache::qQuickView();
QObject::connect(m_view->engine(), SIGNAL(quit()), qApp, SLOT(quit()));
m_view->setSource(QUrl("qrc:/qml/main.qml"));
m_view->showFullScreen();
//使用动态库
MyLib mylib;
lib.add(); //调用动态库的add方法
}
A:因Qt对中文支持不是很理想,建议在创建SyberOS SDK工程时在纯英文的路径下进行,从而避免一些不可意料的错误(如,示例工程中显示的时间格式(12小时进制)与模拟器中时间的格式(24小时进制)不一致;手机上运行时,报签名失败错误)。
A:可能是下面三种情况导致的,请确保下面的三种情况都满足。
A:报错信息如下图所示:
解决方法: 命令行执行下面命令:
ssh-keygen -f "/home/shouxiaoyun/.ssh/known_hosts" -R 192.168.100.100
注:上面命令需以自己机器报错信息为准,即此处执行的命令为上图倒数第3行ssh-keygen处的内容。
A:因为$$DATA_DIR是存放可被修改的数据的目录,所以不允许用户通过修改工程的pro文件将文件安装到$$INS_DIR目录下。
A:官网上下载的ubuntu14.04.1与ubuntu14.04.4镜像中的内核版本均为4.2.7,而我们对外提供的virtualBox的相关包是在内核版本为3.13.0上使用的,故出现上述错误。方案一:建议到官网上找老的ubuntu14.04镜像,以满足我们提供的virtualBox包所需环境;方案二:在现在环境下,安装可用的virtualBox,有网的话,可以在线安装就不需要去下载相关依赖包,无网的话,就需要事先下载好virtualBox及其依赖包(从上面信息看,virtual4.3.10不能再4.2.7的内核版本上使用,应该下载较高版本的virtualBox)。
A:SyberOS IDE开发的程序,命令行启动方式:
sdk-invoker 延迟时间 'sopid':'uiapp id':类型(有uiapp与server两种) 可执行程序路径
举例如下:
sdk-invoker 0 com.syberos.note:com.syberos.noteui:uiapp /usr/apps/com.syberos.note/bin/note
A:我们的SyberOS SDK是基于Qt5.x版本进行开发的,因Qt5 移除了 QFtp API,所以不能直接使用QFTP的API进行开发。可以使用QNetworkAccessManager 提供的相关API来实现FTP功能。
A:如何选择文件请参考SeleteFile压缩包中的demo。
demo说明:点击按钮择文打开文件选择列表,选件后,点击右上角的“确定”按钮,返回主界面,同时主界面上会把选择的文件路径显示出来。
A:打开相机拍照功能是通过插件形式提供的,使用方法参见TakePhoto.qml文件中的代码。
// TakePhoto.qml 文件
import com.syberos.multimedia.camera 1.0
import com.syberos.basewidgets 2.0
import QtQuick 2.0
CameraPlugin {
id: __cameraPlugin
Component.onCompleted:{
gScreenInfo.setStatusBar(false)
}
Component.onDestruction :{
gScreenInfo.setStatusBar(true)
gScreenInfo.setStatusBarStyle( "transblack")
}
}
//外部调用该功能,可以使用下面的方式:
pageStack.push(Qt.resolvedUrl("TakePhoto.qml"));
A:目前在main_dev及双系统手机中可以使用slog工具来输出log,其他环境(如红米2A)可以使用标准的c语言方法输出log(如printf)。
slog的使用方法如下:
Makefile文件中:
LDLIBS += -lslog
头文件:
#include <slog.h>
接口:
int slog(int prio, const char *format, ...);
参数说明:
prio:说明日志优先级,可选值为:
#define LOG_AUDIT -1 /* audit log */
#define LOG_EMERG 0 /* system is unusable */
#define LOG_ALERT 1 /* action must be taken immediately */
#define LOG_CRIT 2 /* critical conditions */
#define LOG_ERR 3 /* error conditions */
#define LOG_WARNING 4 /* warning conditions */
#define LOG_NOTICE 5 /* normal but significant condition */
#define LOG_INFO 6 /* informational */
#define LOG_DEBUG 7 /* debug-level messages */
rpm包spec文件:
BuildRequires: libslog-devel
如,在platfrom SDK环境下编译报“找不到libslog-devel包”,如果搭建了gbs服务器,可以执行下面命令来查看zypper源中是否有libslog-devel包,如果有且没有安装,则安装它。命令如下:
sb2 -t syberos-target-armv7tnhl -m sdk-install -R zypper se libslog
sb2 -t syberos-target-armv7tnhl -m sdk-install -R zypper install libslog-devel
如果只是安装了platfrom SDK环境,没有gbs服务器的话,只能我们这边下载相应的包,然后把包给客户安装上去。
A:访问虹膜与编写Camera应用没有区别,只要把CameraPosition指定为QCamera::FrontFaceIris 即可。
红外灯控制接口:
包含头文件:
#include <hybris/syberos/camera/camera_compatibility_layer_capabilities.h>
链接库:LIBS += -L/usr/lib/ -lsyberos_camera
android_camera_LED_On(); //打开红外灯
android_camera_LED_Off(); //关闭红外灯
注:上面的接口在后续开发中可能会删除,可以先使用上面的接口进行开发,后续我们会告知新接口。
tst_camera-0304压缩包中是一个Camera的demo。
A:查看~/.bashrc文件末尾是否有“alias sdk=/srv/syberos/sdks/sdk/syberos-sdk-chroot”信息,如果有,说明sdk命令已经安装成功,此时执行“source ~/.bashrc”命令,然后就可以使用sdk命令了。
A:
定义宏使用:
DEFINES += XX YY ZZ
添加编译选项:
QMAKE_CFLAGS += -g //c语言
QMAKE_CXXFLAGS += -g //c++语言
A:下面以一个例子来说明工程项目的pro文件怎么写,及如何控制子目录的编译顺序:
#-------------------------------------------------
#
#### Project generated by QtCreator for SyberOS.
#
#-------------------------------------------------
TEMPLATE = subdirs
SUBDIRS += common extract plugins
CONFIG += ordered
common,extract,plugins目录的编译顺序为:先编common、再编extract、最后编plugins。
A:修改工程的pro和spec文件,修改如下:
pro文件添加:
CONFIG += debug
spec文件如果包含下面内容,则将其删除或注释掉:
%define debug_packages %{nil}
%define debug_package %{nil}
注释方法:
#%%define debug_packages %{nil}
#%%define debug_package %{nil}
A:手机cpu是32位的。
A:CPageStackWindow控件的inPortrait属性用来表示当前是竖屏还是横屏,所以可根据这个属性来控制状态栏的显示。示例代码如下:
import QtQuick 2.0
import com.syberos.basewidgets 2.0
CPageStackWindow {
id: pageStackWindow
initialPage:CPage{
width:parent.width
height:parent.height
orientationPolicy:CPageOrientation.Automatic
statusBarHoldEnabled: inPortrait
Connections {
target: pageStackWindow
onInPortraitChanged: {
if (inPortrait) {
gScreenInfo.setStatusBar(true);
} else {
gScreenInfo.setStatusBar(false);
}
}
}
}
}
A:在SyberOS SDK中查找包、安装包、删除包命令如下:
//查看有哪些分支可用
ll ~/SyberOS-SDK/root/
//查看jail-main上是否安装了track包:-t参数有arm和i586
~/SyberOS-SDK/tools/jailmanage -o jail-main -t arm -l | grep tracer
//删除已经安装的包
~/SyberOS-SDK/tools/jailmanage -o jail-main -t arm -r 包名
//安装包
~/SyberOS-SDK/tools/jailmanage -o jail-main -t arm -i rpm包放置的路径
注:如果安装包时出错,请修改jailmanage文件中 #### Install rpm packages 部分的command字段,添加 --nodeps 选项。
A:首先,修改程序所在工程的pro文件,如果是c++程序的话添加 QMAKE_CXXFLAGS += -g ,之后在platfromsdk中进行编译,成功后,把生成的可执行程序拷贝到手机中,之后在手机中就可以使用 gdb 可执行程序路径 进程调试。
A:首先,修改工程的pro文件,添加 CONFIG += debug ,如果工程的spec文件中包含下面3行内容,则需要删掉或注释掉:
%define debug_packages %{nil}
%define debug_package %{nil}
%define _missing_doc_files_terminate_build 0
之后编译生成rpm包,然后将生成的rpm、debugsource和debuginfo包都安装到手机上,之后就可以使用 gdb 可执行程序路径 进行调试。
A:玄武手机coredump文件放置在“/data/home/user/coredump”目录下。
使用coredump文件调试方法:
A:按下menu键,然后到图片应用中或者文件管理器查看。
A:正确安装PlantFrom SDK环境后,在Ubuntu命令行终端执行 sdk enter 命令,进入PlantFrom SDK环境;然后执行 sb2 -tsyberos-armv7tnhl-target 命令,进入sb2编译环境,在这个环境下,就可以直接使用gcc来编译程序,如: gcc main.cpp 。
A:如果是因为曾手动向应用程序的安装目录/data/apps/xxx下拷贝过文件导致的,可尝试按照下面的方法来解决。以sopid为com.mycompany.myApp的应用为例,建议操作(需要切换到root):
1.进入手机,先执行如下命令:
/usr/sbin/userdel -x -r com.mycompany.myApp
2.再执行下面命令从policy-governor.db删除相关信息:
sqlite3 /data/install/policy_governor/policy-governor.db
上面命令输入结果如下图所示:
在 sqlite> 后输出
delete from PACKAGE_UID_TABLE where PACKAGE_OWNER_NAME="com.mycompany.myApp";
内容后回车,完成后按 ctrl+c 退出。
3.1和2执行成功后,执行下面命令同步所有修改:
sync
A: 在终端输出彩色信息有点类似于html的语法,即在要输出的文字前加上转义字符。
指令格式如下:
\033[*m
......
\033[0m
这里的 * 就是转义字符,上面的语句以 \033[*m 开始,以 \033[0m 结束,中间的文字是需要被设置颜色的。
例如我们要输出一段绿色的文字:
qDebug() << "\033[32mHello!\033[0m";
其中*的常用取值如下:
A: 手动关闭防火墙的方法如下:
root用户:
方法一:
[root@localhost developer]#### /sbin/iptables -P INPUT ACCEPT
[root@localhost developer]#### /sbin/iptables -P OUTPUT ACCEPT
注:以上方法只本次生效,手机被重启后需要重新执行以上两句。
方法二:
[root@localhost developer]#### rpm -qa |grep firewall
firewalld-0.1.0-1.syberos.1.4.armv7tnhl
firewall-1.5.0-1.3.1.armv7tnhl
[root@localhost developer]#rpm -e firewall-1.5.0-1.3.1.armv7tnhl --nodeps
A: /data/apps/com.xxx.xxx 目录用来存放应用的安装文件及可执行程序文件,应用对该目录有读权限但是没有写权限。故,应用首先应该将其使用的配置文件安装到 /data/apps/com.xxx.xxx 目录下,然后在程序中将该配置文件拷贝到应用的数据目录 /data/data/com.xxx.xxx 下,之后就可以对数据目录下的该文件进行读写访问了。
A:报错信息如下图所示:
解决方法: 首先,点击SyberOSIDE顶部菜单栏中的“工具”->“选项”按钮,之后按照下图进行配置:
配置完成后,点击“Apply”和“OK”按钮后,即可部署运行程序。
A:sop命令安装上去的应用在手机桌面上都可以看到,常按要删除的应用图标,之后进行删除界面,再点击下要删除的应用,之后点击左上角的删除按钮即可卸载该应用。
A:模拟器中可使用3个按键来控制显示的界面,分别为“Esc”键、“Home”键及“Space空格”键,它们依次对应手机中的Back键、Home键、菜单键。故,运行起来的应用需要退出时,可按下“Esc”键。
A:如果需要改变输入法的默认行为,可通过设置对应控件的inputMethodHints属性来实现。inputMethodHints属性可取值如下:
默认中文键盘: 不需要设置该属性
默认英文键盘: inputMethodHints:Qt.ImhLatinOnly
默认数字键盘: (仅支持数字键盘)inputMethodHints:Qt.ImhDigitsOnly
默认数字键盘: (支持其他键盘)inputMethodHints:Qt.ImhPreferNumbers
默认email键盘:inputMethodHints:Qt.ImhEmailCharactersOnly
默认url键盘: inputMethodHints:Qt.ImhUrlCharactersOnly
以只使用数字键盘举例如下:
TextInput {
property variant __inputMethodExtensions;
width: 100
height: 100
text: qsTr("only num")
inputMethodHints:Qt.ImhDigitsOnly //用于仅仅支持数字键盘,其他不可用
}
A:在需要显示的页面中添加如下设置:
Component.onCompleted: {
gScreenInfo.setWindowProperty("CATEGORY", "dialing"); //设置锁屏状态下直接弹出
gScreenInfo.setWindowProperty("WM_NOT_LOCK", "true"); //设置通话过程中不锁屏
}
A:请按照以下方法操作:
1)首先,需要修改工程的pro文件,添加如下内容:
PKGCONFIG += syberos-qt-system
2)在某个适当的头文件及cpp中做如下修改:
头文件中,添加如下代码:
#include <csystempowermanager.h> //包含头文件
.......
public slots:
void setDisplayState(bool state);//添加函数供qml中调用
private:
CSystemPowerManager powerManager; //定义变量
cpp文件中,添加代码如下:
void XXXX::setDisplayState(bool state)
{
if (state) {
powerManager.setDisplayState(powerManager.DisplayOn); //控制点亮屏幕
} else {
powerManager.setDisplayState(powerManager.DisplayOff); //关闭屏幕
}
}
3)需要点亮屏幕或关闭屏幕时,在qml中调用导出到qml中的2中c++对象的setDisplayState函数即可。
A:SDK Ide帮助部分提供的内容对应的文档放置在~/SyberOS-SDK/root/jail-xuanwu/usr/share/doc/qt5/目录中,是一些以.qch为后缀的文件。
注:上述存放xxx.qch文件的路径~/SyberOS-SDK/root/jail-xuanwu/usr/share/doc/qt5/需根据实际情况而定, “root/jailxuanwu/”部分的路径应根据实际使用的SDK的版本情况进行修改,“/usr/share/doc/qt5/”部分的路径固定。
Windows上需要先安装Qtcreator,然后到Qtcreator的安装目录下查询assistant程序,找到之后双击assistant程序,添加要查看的xxx.qch文件即可。
下面是ubuntu系统下,执行assistant程序添加qch文件的方法,Windows下用法类似:
A:查看网卡速率需要有专门的工具,故可使用工具源码在元心平台上编译出对应的可执行程序,然后将该程序拷贝到手机中执行即可。
在此可编译使用nload1命令来查看网卡速率:
//nload1的具体用法可以看看帮助
./nload1 -h
例如测wifi:
./nload1 devices wlan0
A:上述错误可能是Ubuntu系统的bug或之前做了一些操作破坏了系统环境,因无法重现,所以具体原因还不明确。可通过下面方面来暂时解决运行报错的问题。
命令行方式运行SDK IDE的可执行程序:
.../SyberOS-SDK/ide/bin/qtcSyberIDE
A:监听录音状态变化事件,当状态变为QMediaRecorder::LoadedStatus时,表明录音文件已存储完成。需要注意的是录音状态变为QMediaRecorder::LoadedStatus可能不止一种情况,所以需要根据情况对其进行区分。针对此问题,需要判断是否是stop()方法引发的录音对象的状态变为QMediaRecorder::LoadedStatus。 下面是相关的代码实现:
CAudioInput::CAudioInput(QObject *parent) :
QObject(parent)
{
m_audioRecorder = new QAudioRecorder(this);
m_recordStopFlag = false;
QAudioEncoderSettings audioSettings;
audioSettings.setSampleRate(8000);
audioSettings.setChannelCount(1);
audioSettings.setCodec("audio/AAC");
audioSettings.setQuality(QMultimedia::HighQuality);
m_audioRecorder->setEncodingSettings(audioSettings);
m_audioRecorder->setOutputLocation(QUrl("/tmp/test.aac"));
connect(m_audioRecorder,SIGNAL(statusChanged(QMediaRecorder::Status)),
this,SLOT(statusChanged(QMediaRecorder::Status)));
}
void CAudioInput::startRecord()
{
if(m_audioRecorder->state() == QMediaRecorder::StoppedState)
{
m_audioRecorder->record();
m_recordStopFlag = false;
}
}
void CAudioInput::stopRecord()
{
if(m_audioRecorder->state() == QMediaRecorder::RecordingState)
{
m_audioRecorder->stop();
m_recordStopFlag = true;
}
}
void CAudioInput::statusChanged(QMediaRecorder::Status status)
{
qDebug () << "status: " << status;
if (m_recordStopFlag && status == QMediaRecorder::LoadedStatus) {
qDebug() << "record file size: " << QFile("/tmp/test.aac").size();
}
}
A:应用启动动画是通过在应用中添加splash来完成的,添加splash方法如下:
res.files = res
res.path = $$INS_DIR/
INSTALLS += res
syberos:splash="res/filemanager_initial.jpg"
完成上述3步启动动画即添加成功,可通过启动程序来验证。
A:CPageStackWindow控件有两个boolean类型的属性来控制默认左滑效果的开与关:
applicationQuitGestureEnabled: 控制首页中是否退出应用,默认为true;
pagePopGestureEnabled: 控制非首页中是否反回上一页,默认为true。
A:可按照下面方法对sdk模拟器中的配置文件进行修改:
A:下面以VirtualBox包为例,来说明deb包的安装、查询及删除方法。
//安装deb包
sudo dpkg -i virtualbox-4.3_4.3.10-93012-Ubuntu-precise_amd64.deb
//查询安装的virtualbox包
sudo dpkg -l virtualbox
//删除查询到的已安装的virtualbox包
sudo dpkg -P virtualbox
A:开源的库需要在元心的PlatfromSDK中编译,然后才可在SyberOS开发的程序中使用。
//针对红米手机使用
PlatformSDK(作用:动态库、系统服务编译环境)下载地址及密码如下:
地址:http://pan.baidu.com/s/1c1HAWcK
密码:c8n5
//针对xuanwu手机使用
PlatformSDK下载地址及密码如下:
地址:http://pan.baidu.com/s/1i5wcKjN
密码:sg14
A:查看主机中下面路径文件中的内容:
cat ~/.scratchbox2/config
A:
A:请按照下面方面进行操作:
scp xxx.sop developer@192.168.100.100:/data/developer
ssh developer@192.168.100.100 //密码为system
之后执行 su 命令切换root用户,密码也为system;
ins-tool -iu xxx.sop
A:添加zypper源、更新zypper源及出错信息如下图所示:
解决方法:
进入pdk环境后,再执行 sb2 -R ,然后切换到"/etc/zypp/repos.d"目录下,查看该目录下的applications.repo文件,看下baseurl字段的地址能否在浏览器中访问。
A:桌面无法启动可能是启动超时导致的退出(超过15s都没有show出窗口),而sdk-invoker启动没有启动超时的检查, 所以sdk-invoker能起来,但是从桌面启动不起来。这个时候就需要去检查在showFullScreen之前是不是做了什么耗时的操作了,导致超过15s还不能将界面显示出来。
A:蓝牙模块对外提供了openurl接口,供应用程序发送图片。下面是在C++中封装的发送图片的例子,可以参考。
注:Utils::sendSelectedByBlueTooth是自定义的类接口,fileList是要发送的文件列表。
//for blue operator
bool Utils::sendSelectedByBlueTooth(QStringList fileList)
{
QString pathList = fileList.join("*");
qApp->openUrl("bt-share:share?" + pathList);
return true;
}
A:下面以手机镜像中脚本修改方法为例进行说明:
//脚本路径:~/gbs_image_sdk/imagebuild_phone/osevo/mkimg.sh
//打开该文件,在`mv -f $FSPATH/etc/newfstab $FSPATH/etc/fstab`(对应该文件的第82行)内容后面,加上下面内容:
sed -i '/^camera:x:13/ s/$/com.syberos.settings,service/' $FSPATH/etc/group
chmod 777 $FSPATH/sys/ir_led/lm3642_torch_pin
chmod 777 $FSPATH/data/share/settings/wallpaper
A:spec文件中可以使用echo命令来打印log。echo语句添加的位置应在%setup之后的某个位置进行添加,如下面示例:
%description
test servce start by systemd and dbus
%prep
%setup -q -n %{name}-%{version}/%{name}
echo "-------start build--------"
%build
export QT_SELECT=5
qmake
make
运行rpmbuild编译时,可参考下面命令将参数传到spec文件中使用:
//--define=“MACRO EXPR” 定义值为 EXPR 的 MACRO
rpmbuild -ba ../xxx.spec --define="MACRO EXPR"
//spec文件中引用MACRO宏
echo “MACRO=%{MACRO}”