hl1200 发表于 2018-2-9 13:54:11

准备玩hi3518e,步步更新。

先上图,主板是3.5元从垃圾佬手中收来的,USB转串口是5元收来的,还是买一送一,底板从阿莫处买的,十几元。。。

seaman117 发表于 2018-2-9 14:10:28

一看是奶粉还以为点了广告{:lol:}

hongyancl 发表于 2018-2-9 14:30:25

留个爪吧

MAD_FISH 发表于 2018-2-9 15:08:39

usb转串口好便宜啊

boyiee 发表于 2018-2-9 15:13:56

这货一切都是为IP摄像头做的,学习起来不如普通处理器,SDK都是IPCAM的东西。

如果想学习建议买个2440之类的开发板,学习省下来的时间比硬件的成本高太多了。

hushaoxin 发表于 2018-2-9 15:44:03

买了一罐楼主位的奶粉,儿子不喝,我喝了一杯试试,恶心我一晚上,一股死鱼味

XA144F 发表于 2018-2-9 16:33:28

正好,我也跟着楼主学习开发过程……需要先准备什么?

jackiezeng 发表于 2018-2-9 16:35:02

好帖,,不过不知道这些CPU是不是要签订保密协议才能拿到资料?

lnso 发表于 2018-2-9 17:53:36

好贴,几块钱的开发板楼住还有吗?想搞两块吃灰

hl1200 发表于 2018-2-9 18:05:18

老规矩,tty,NFS,分析数据。

Creating 6 MTD partitions on "hi_sfc":                                          
0x000000000000-0x000000040000 : "boot"                                          
0x000000040000-0x000000060000 : "env"                                          
0x000000060000-0x000000080000 : "conf"                                          
0x000000080000-0x000000400000 : "os"                                          
0x000000400000-0x000000800000 : "rootfs"                                       
0x000000800000-0x000001000000 : "userfs"

6分区,rootfs只读,usrfs读写。

# df                                                                           
Filesystem         1K-blocks      Used Available Use% Mounted on            
/dev/root               3712      3712         0 100% /                     
tmpfs                  13544         4   13540   0% /dev                  
tmpfs                  13544         0   13544   0% /tmp                  
tmpfs                  13544         4   13540   0% /var                  
tmpfs                  13544       116   13428   1% /etc                  
/dev/mtdblock5            8192      3744      444846% /esntd

userfs挂在/esntd上。


# vi /etc/init.d/rcS

#! /bin/sh
            
/bin/mount -a
      
echo "
                                       
||||\||||||||   ||||||||||||||
|\    \||   \||||\    ||    ||   ||
||||\|||\   \| |\ |\    ||    ||   ||
||       \||\||||\    ||    ||   ||
||   \||\|\||\    ||    ||||\
||||| \||||\||   ||\    ||    |||||\
            
www.esntd.com
"                                          
for initscript in /etc_ro/init.d/S*
do                           
      if [ -x $initscript ] ;
      then                           
                echo ": $initscript"
                $initscript
      fi
done

# ls /etc_ro/init.d/                                                            
S00devs   S01udev   S80networkrcS
创建dev没什么好看的

# vi /etc_ro/init.d/S80network

#!/bin/sh

nvrinit=`nvram_get esn_nvr WebInit`
if [ "$nvrinit" != "1" ]; then
      echo "Init User NVRAM Default Config ...!"
      esntd_nvram renew esn_nvr /esntd/default_cfg.bin
fi

ifconfig lo 127.0.0.1

lanmac=`nvram_get esn_idn lan_mac`
if [ "$lanmac" != "" ]; then
      ifconfig eth0 hw ether $lanmac
fi

ifconfig eth0 up

/esntd/usr_init
就是设置好网络参数,然后执行/esntd/usr_init
参数:
cat /esntd/default_cfg.bin                                                   
#The word of "Default" must not be removed                                    
Default                                                                        
WebInit=1                                                                     
HostName=IPCamera                                                               
Login=admin                                                                     
Password=                                                                     
OperationMode=2                                                               
lan_ipaddr=192.168.1.239                                                      
lan_netmask=255.255.255.0                                                      
lan_gateway=192.168.1.1                                                         
lan_dns=192.168.1.1                                                            
lan_staticip=0                                                                  
web_port=80                                                                     
NTPServerIP=time.nist.gov                                                      
NTPSync=48                                                                     
TZ=CST_008                                                                     
net_upnp=0                                                                     
net_ddns=0                                                                     
ap_enb=0

# cat /esntd/usr_init                                                         
#!/bin/sh                                                                     
                                                                              
echo "Start User Init ...!"                                                   
                                                                              
ulimit -s 1024                                                                  

#加载传感器 ,这个没有。。。                                                                              
cd /hiko && ./load3518e -i ov9712                                             

#wifi驱动选择                                                                              
ap_en=`nvram_get esn_nvr ap_enb`                                                
if ["$ap_en" = "0" ]; then                                                   
insmod /esntd/mt7601Usta.ko                                                   
ifconfig ra0 up                                                               
else                                                                           
insmod /esntd/mt7601Uap.ko                                                      
ifconfig ra0 up                                                               
ifconfig apcli0 up                                                            
fi                                                                              

#goahead web server更新                                                                              
if [ -f /esntd/goahead_new ]                                                   
then                                                                           
      rm -f /esntd/goahead                                                   
      mv /esntd/goahead_new /esntd/goahead                                    
      chmod 777 /esntd/goahead                                                
fi

#不明程序esndo更新                                                                              
if [ -f /esntd/esndo_new ]                                                      
then                                                                           
      rm -f /esntd/esndo                                                      
      mv /esntd/esndo_new /esntd/esndo                                       
      chmod 777 /esntd/esndo                                                
fi                                                                              
#加载wdt驱动                                                                              
#cd /hiko && insmod wdt.ko default_margin=20 nodeamon=0 nowayout=0            
cd /hiko && insmod wdt.ko                                                      
                                                                              
cd /esntd/                                                                     
                                                                              
/esntd/esndo &                                                                  
                                                                              
/esntd/app_startup.sh &                                                         
                                                                              
/esntd/teldbg.sh &            


# cat /esntd/app_startup.sh
#!/bin/sh

PROGRAM="/esntd/goahead /esntd/web"
PROGRAM_NAME="goahead"

appcnt=0
while true; do

                appcnt=`ps |grep -v grep | grep -c $PROGRAM_NAME`

    if [ $appcnt == 0 ]; then
   
      killall -9 $PROGRAM_NAME                                                
            $PROGRAM &                                                         
            sleep 2                                                            
    fi                                                                        
                                                                              
    sleep 20                                                                  
                                                                              
done                                                                           
                                                                              
exit 0
                  
循环打开goahead

# cat /esntd/teldbg.sh                                                         
echo "root:zg2014" > /tmp/tmpchpw                                             
chpasswd < /tmp/tmpchpw                                                         
rm -f /tmp/tmpchpw                                                            
                                                                              
telnetd &

打开telnetd

整个启动过程完成。

hl1200 发表于 2018-2-9 18:08:21

lnso 发表于 2018-2-9 17:53
好贴,几块钱的开发板楼住还有吗?想搞两块吃灰

我也是搞了几块,主要目的是熟悉海思这些cpu,雄迈ipc模块才40多一块。

hl1200 发表于 2018-2-9 18:09:07

jackiezeng 发表于 2018-2-9 16:35
好帖,,不过不知道这些CPU是不是要签订保密协议才能拿到资料?

假货宝大把SDK

hl1200 发表于 2018-2-9 18:10:16

XA144F 发表于 2018-2-9 16:33
正好,我也跟着楼主学习开发过程……需要先准备什么?

初学linux,进阶拆路由,最后玩这个。

hl1200 发表于 2018-2-9 18:13:20

MAD_FISH 发表于 2018-2-9 15:08
usb转串口好便宜啊

ST micro connect lite,垃圾佬那里收的。前几年不少厂倒闭,垃圾佬那里不少好货,现在都木有了。。。

hl1200 发表于 2018-2-9 18:16:09

boyiee 发表于 2018-2-9 15:13
这货一切都是为IP摄像头做的,学习起来不如普通处理器,SDK都是IPCAM的东西。

如果想学习建议买个2440之类 ...

玩现成的,玩便宜的。

huangqi412 发表于 2018-2-10 10:05:22

垃圾佬那里真是什么都有

ExtremeFly 发表于 2018-2-11 14:53:47

huangqi412 发表于 2018-2-10 10:05
垃圾佬那里真是什么都有

垃圾佬是谁,论坛里卖二手仪器的那位吗?

孤独的猫 发表于 2018-2-11 15:56:36

求板子链接 。。。。。。      

zxq6 发表于 2018-2-11 22:55:35

这玩意是不是必须得会linux?

hantnt 发表于 2018-2-12 21:26:19

楼主好好玩,再学下结构,做个ipcamera给坛友玩啊

hl1200 发表于 2018-3-6 01:29:21

写了个小程序,读ADC数值,如果有变化,则显示出来
驱动:
#include <linux/module.h>
//#include <asm/hardware.h>
#include <linux/errno.h>
#include <linux/miscdevice.h>
#include <linux/fcntl.h>
#include <linux/spinlock.h>
#include <linux/init.h>
#include <linux/delay.h>
#include <linux/proc_fs.h>
#include <linux/workqueue.h>

#include <asm/uaccess.h>
#include <asm/system.h>
#include <asm/io.h>

#include "adc.h"

#define SAR_ADC_ADRESS_BASE         0x200B0000

void __iomem * reg_sar_adc_base_va = 0;
#define HI_IO_ADDRESS(x) (reg_sar_adc_base_va + ((x)-(SAR_ADC_ADRESS_BASE)))

//ADC conversion status register
#define ADC_STATUS_REG       HI_IO_ADDRESS(SAR_ADC_ADRESS_BASE + 0x000)
//ADC conversion control register
#define ADC_CTRL_REG         HI_IO_ADDRESS(SAR_ADC_ADRESS_BASE + 0x004)
//ADC mode control register
#define ADC_POWERDOWN_REG    HI_IO_ADDRESS(SAR_ADC_ADRESS_BASE + 0x008)
//Masked ADC conversion completion interrupt register
#define ADC_INT_STATUS_REG   HI_IO_ADDRESS(SAR_ADC_ADRESS_BASE + 0x00C)
//conversion completion interrupt mask register
#define ADC_INT_MASK_REG   HI_IO_ADDRESS(SAR_ADC_ADRESS_BASE + 0x010)
//ADC conversion completion interrupt clear register
#define ADC_INT_CLR_REG      HI_IO_ADDRESS(SAR_ADC_ADRESS_BASE + 0x014)
//Raw ADC conversion completion interrupt register
#define ADC_INT_RAW_REG      HI_IO_ADDRESS(SAR_ADC_ADRESS_BASE + 0x018)
//ADC_RESULT ADC conversion result register
#define ADC_RESULT_REG       HI_IO_ADDRESS(SAR_ADC_ADRESS_BASE + 0x01C)


#defineSAR_ADC_WRITE_REG(Addr, Value) ((*(volatile unsigned int *)(Addr)) = (Value))
#defineSAR_ADC_READ_REG(Addr)         (*(volatile unsigned int *)(Addr))


int SAR_ADC_Open(struct inode * inode, struct file * file)
{
    unsigned intSarADCReg;
    SarADCReg = SAR_ADC_READ_REG(ADC_POWERDOWN_REG);
    if(SarADCReg & ADC_POWERDOWN) //if POWERDOWN bit is set
   {
      SAR_ADC_WRITE_REG(ADC_POWERDOWN_REG, 0x0000);//clean thePOWERDOWN bit
//      printk("adc powerup!\n");
   }
   return 0 ;

};

intSAR_ADC_Close(struct inode * inode, struct file * file)
{
    unsigned intSarADCReg;
    SarADCReg = SAR_ADC_READ_REG(ADC_POWERDOWN_REG);
    if(SarADCReg & ADC_POWERDOWN) //if POWERDOWN bit is set
   {
//      printk("adc powerdown!\n");
      return 0;
   }
    SAR_ADC_WRITE_REG(ADC_POWERDOWN_REG, 0x0001);//set thePOWERDOWN bit
//    printk("adc powerdown!\n");
    return 0;
}




static long SAR_ADC_Ioctl(struct file *file, unsigned int cmd, unsigned long arg)
{
    SAR_ADC_DATA_S __user *argp = (SAR_ADC_DATA_S __user*)arg;
    unsigned intSarADCReg,SarADCReg1;
    int       Ret = 0;
   
    switch (cmd)
    {

      case CMD_SAR_ADC_READ:
      {
            SAR_ADC_WRITE_REG(ADC_CTRL_REG, ADC_CHANNEL1 );//set the channel1
            SAR_ADC_WRITE_REG(ADC_CTRL_REG, (ADC_CHANNEL1 | ADC_CONVERSION));//start
            
            Ret = 0;
            while(SAR_ADC_READ_REG(ADC_CTRL_REG) & ADC_CONVERSION) //wait if conversing
               {
               if(Ret > 0xfff) {printk("time out!\n");return -1; }//break if time out.
               Ret++;
               }

            argp->data = SAR_ADC_READ_REG(ADC_RESULT_REG); //read the data         
   

读adc的程序:
#include <stdio.h>
#include <ctype.h>
#include <sys/ioctl.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <pthread.h>

#include "adc.h"

typedef struct tag_KEY_ARG
{
    unsigned char keyWorld;
    pthread_t thrPid;
} KEY_ARG;




void *GetTheKeyWorld(void *parg)
{
    KEY_ARG *pkeyArg = (KEY_ARG*)parg;
    while((pkeyArg->keyWorld = getchar()) != 'q');
    return 0;
}


int main(int argc , char* argv[])
{
        int fd = -1;
        int ret;
   unsigned int adcData = 0;
        SAR_ADC_DATA_S adc_data;
   KEY_ARG keyArg;
   keyArg.keyWorld = 0;

        fd = open("/dev/sar_adc", 0);       
    if (fd<0)
    {
            printf("Open sar_adc dev error!\n");
            return -1;
    }
   
   pthread_create(&keyArg.thrPid, 0, GetTheKeyWorld, &keyArg);
    while(keyArg.keyWorld != 'q')
    {
      ret = ioctl(fd, CMD_SAR_ADC_READ, &adc_data);
      if(ret != 0) {printf("read adc failt"); continue;}
      if(adc_data.data != adcData) {adcData = adc_data.data; system("clear");printf("adc value is 0x%x\n",adc_data.data);}
      //sleep(1);
    }
        close(fd);

    return 0;
}

头文件

#ifdef __cplusplus
#if __cplusplus
extern "C" {
#endif
#endif /* __cplusplus */

#define CMD_SAR_ADC_READ       0x03


/* ADC_STATUS_REG */
#define ADC_STATUS_PERFORM      (1 << 0)

/* ADC_CTRL_REG */
#define ADC_CHANNEL0   (0 << 16)
#define ADC_CHANNEL1   (1 << 16)
#define ADC_CONVERSION (1 << 0)

/* ADC_POWERDOWN_REG */
#define ADC_POWERDOWN (1 << 0)

/* ADC_INT_STATUS_REG */
#define ADC_INT_MASKED (1 << 0)

/* ADC_INT_MASK_REG */
#define ADC_INT_MASK (1 << 0)

/* ADC_INT_CLR_REG */
#define ADC_INT_CLR (1 << 0)

/* ADC_INT_RAW_REG */
#define ADC_INT_RAW (1 << 0)

typedef struct SAR_ADC_DATA_S
{
        unsigned int         data;
       
}SAR_ADC_DATA_S ;


#ifdef __cplusplus
#if __cplusplus
}
#endif
#endif /* __cplusplus */

#endif

so_so_so_so 发表于 2018-3-6 09:23:10

学习一下,学习一下,学习一下,学习一下。

gmyu 发表于 2018-4-24 09:13:07

楼主走两步就算了?

abnerle 发表于 2018-4-24 09:22:56

3.5元收的,真是够便宜,拆机卖片子,也差不多了

rom 发表于 2020-3-12 16:23:06

这后来就没消息了啊?

dellric 发表于 2020-3-12 19:33:39

建议学习2440或者NUC972,这个太面向IPC了,太多IPC内容而失去了嵌入式系统的乐趣。
页: [1]
查看完整版本: 准备玩hi3518e,步步更新。