MISC Q&A

Q1:编译报错undefined reference to 'FBD_Execute'

需要修改makefile添加LIBS += -lfbc_decode ,重新编译即可。

Q2:编解码规格

h264/h265编解码共用一组硬件,只要编码+解码总分辨率不超过规格即可。

SSR910Q:最大4K30

SSR920G:最大4K45

jpd/jpe为独立硬件,跟h264/h265也不一样,910/920规格一样,jpe最大4K30,jpd最大4K20.

Q3:查看芯片温度

  1. 代码方式获取

    #include <fcntl.h>
    #include <stdio.h>
    #include <ctype.h>
    #include <sys/ioctl.h>
    #include <sys/types.h>
    #include <stdlib.h>
    #include <string.h>
    #define MSYS_IOCTL_MAGIC             'S'
    #define IOCTL_MSYS_READ_PM_TSENSOR          _IO(MSYS_IOCTL_MAGIC, 0x78)
    int main(int argc, char* argv[])
    {
        int fd=-1,ret;
        int temprature=0;
        fd=open("/dev/msys",O_WRONLY);
        if(-1==fd)
        {
            printf("fail to open msys device\n");
            return 0;
        }
        while(1){
            ret = ioctl(fd,IOCTL_MSYS_READ_PM_TSENSOR,&temprature);    
            if(ret == 0)printf("temprature = %d\n",temprature);
            else printf("get temprature fail\n");
            sleep(2);
        }
        return 0; 
    }
    
  2. 命令行方式获取

    cat /sys/devices/virtual/mstar/msys/TEMP_R
    

Q4:CPU Freq 频率如何调整?

系统启动时生成一个文件夹/sys/devices/system/cpu/cpu0/cpufreq,下面有几个节点:

cpuinfo_min_freq:平台支持的最小主频频率

cpuinfo_max_freq:平台支持的最大主频频率

cpuinfo_cur_freq/scaling_cur_freq:查看当前CPU主频

scaling_min_freq:允许调节器动态调节的范围最小值(只有允许调节器根据cpu loading动态调整cpu频率时才有用)

scaling_max_freq:允许调节器动态调节的范围最大值

scaling_governor:指定cpu频率调整模式(常用performance:固定cpu频率而不动态调节;ondemand:动态调整cpu频率)

检测CPU当前运行频率:

cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq

调整CPU主频跑1G:

方法1

echo 1000000 > /sys/devices/system/cpu/cpu0/cpufreq/scaling_max_freq 
echo performance > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor

方法2

cd sys/devices/system/cpu/cpu0/cpufreq/

echo userspace > scaling_governor

echo 1200000 > scaling_max_freq

echo 400000 > scaling_min_freq

echo 1000000 > scaling_setspeed

cat scaling_cur_freq

Q5:编译uboot报错CC:not found

$make mercury6_defconfig

HOSTCC scripts/basic/fixdep

/bin/sh: 1: cc: not found

这个是由于编译服务器没有安装gcc导致,安装一个即可解决,比如

yum -y install gcc (不同服务器安装方式可能有差异)

Q6:编译project报错Bad substitution

$./setup_config.sh configs/defconfigs/xvr_m6_spinand.glibc-9.1.0-squashfs.016a.512x512.bga2.demo_defconfig

setup_config.sh: 17: Bad substitution

#!/bin/sh

在ubuntu的shell下,实际上运行的是bash。而/bin/sh是到dash的软链接。project/setup_config.sh第一行改成#!/bin/bash即可正常。

Q7:增加或删除分区之后,文件系统起不来,kernel panic报错

需要按照新的分区(partition_layout.txt),调整rootfs分区(以及其他分区)的位置

Q8:cpu是否支持Interactive频率调节模式?

不支持,目前只支持linux自带的4种cpu调节模式。

userspace 由用户空间程序通过scaling_setspeed文件修改频率
powersave 功耗优先策略,直接将频率设置为允许的最小值
ondemand 根据CPU的当前使用率,动态的调节CPU频率
performance 性能优先策略,固定cpu频率

如:echo performance > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governo

Q9:padmux.dtsi中将sdmmc1关闭之后,上电启动出现宕机。

if 0

//SDMMC1 , , , , , , , ,

endif

死机打印:

Hardware name: SStar Soc (Flattened Device Tree)
task: dfd778c0 task.stack: defde000
PC is at MHal_GPIO_Set_High+0x12/0x38
LR is at Hal_CARD_PowerOff+0x24/0x38 [kdrv_sdmmc]
pc : [<c0202a7e>] lr : [<bf11c12d>] psr: 200e0033
sp : defdfd04 ip : def9e600 fp : 00000000
r10: 00000001 r9 : df273940 r8 : bf1204c8
r7 : 00000001 r6 : 00000000 r5 : 00000000 r4 : 00325f45
r3 : c02a6748 r2 : c04387a4 r1 : fd000000 r0 : c02ab6f8
Flags: nzCv IRQs on FIQs on Mode SVC_32 ISA Thumb Segment none
Control: 70c5383d Table: 3ef9b3c0 DAC: 112e3090
Process insmod (pid: 663, stack limit = 0xdefde218)

问题原因:driver此时还认为需要注册两个sd device,然后导致的死机。

解决方法:在 mercury6.dtsi 文件中将 sdmmc的slot num改为1。