模拟智能家居所遇问题汇总------持续更新

主机开发环境:Ubuntu12.04

ARM板:exynos4412

bootloader:u-boot2013.01

kernel:Linux3.14

device tree:origen.dts

根文件系统:ramdisk(10M)

主机gcc版本:gcc-4.6.4.tar

交叉编译工具链:rm-none-linux-gnueabi-gcc-4.6.4

QT Creator 版本:Qt5.4(Linux版)


一、gt818触摸驱动移植问题

Invalid ABS limits,behavior unspecified--------input/event 错误

板子上Cat  /proc/bus/input/devices,看gt818是event几

然后再更改板子上 /etc/profile 里面的event几改过来;

二、sqlite3移植问题

https://www.cnblogs.com/lidabo/p/5851752.html

模拟智能家居所遇问题汇总------持续更新

根据链接文章稍加修改即可使用。


三、USB摄像头驱动移植问题

模拟智能家居所遇问题汇总------持续更新

四、USB转串口驱动移植问题

模拟智能家居所遇问题汇总------持续更新

五、ARM板载屏幕亮度驱动移植问题

模拟智能家居所遇问题汇总------持续更新

六、json库移植问题

模拟智能家居所遇问题汇总------持续更新

模拟智能家居所遇问题汇总------持续更新

模拟智能家居所遇问题汇总------持续更新

http://blog.****.net/miaodichiyou/article/details/50384332

七、QT中文字库移植问题

DroidSansFallback.ttf 放到文件系统 /opt/qt/lib/fonts 目录下,虽然Qt自带了很多字库了,但是都没有中文的。

 然后在使用qt creator 开发qt应用程序时,在项目中添加

  QT      += gui

  包含头文件 #include<QFontDatabase>

  代码中设置使用的字体。

int id=QFontDatabase::addApplicationFont("/sd/opt/lib/fonts/ DroidSansFallback/DroidSansFallback.ttf");

    QStringmsyh=QFontDatabase::applicationFontFamilies(id).at(0);

    QFontfont(msyh,10);

    font.setPointSize(20);

    this->setFont(font)

八、服务器Makefile编写问题

CC =arm-none-linux-gnueabi-gcc

server_system:server.odo_client.o uart.o

         $(CC) server.o do_client.o uart.o -o server_system -lsqlite3-L/home/ubuntu/fs4412/fs/rootfs/sqlite3/install/lib -ljson-L/home/ubuntu/fs4412/fs/rootfs/json/install/lib(将头文件拷到当前目录,用双引号头文件)

 

uart.o:

         $(CC) -c uart.c -o uart.o

server.o:

         $(CC) -c server.c -o server.o

do_client.o:

         $(CC) -c do_client.c -o do_client.o

clean:

         rm -rf *.o server_system

九、socket编程小问题:地址已经被使用——Addressalready in use

1.  f((server_sockfd = socket(AF_INET, SOCK_STREAM, 0))<0)  

2.      {  

3.          perror("server_sockfd creation failed");  

4.          exit(EXIT_FAILURE);  

5.      }  

6.      // 设置套接字选项避免地址使用错误  

7.      int on=1;  

8.      if((setsockopt(server_sockfd,SOL_SOCKET,SO_REUSEADDR,&on,sizeof(on)))<0)  

9.      {  

10.         perror("setsockopt failed");  

11.         exit(EXIT_FAILURE);  

12.     }  

13.     // 将套接字绑定到服务器的网络地址上   

14.     if((bind(server_sockfd,(struct sockaddr *)&server_address,sizeof(struct sockaddr)))<0)  

15.     {  

16.         perror("server socket bind failed");  

17.         exit(EXIT_FAILURE);  

18.     }  

19.     // 建立监听队列  

20.     listen(server_sockfd,5); 

十、nfs网络方式挂载文件系统问题

baudrate=115200

bootargs=root=/dev/nfsnfsroot=192.168.0.150:/home/ubuntu/fs4412/fs/rootfs,proto

=tcp,nfsvers=3,nolock rwconsole=ttySAC2,115200 init=/linuxrc ip=192.168.0.200

bootcmd=tftp 41000000uImage;tftp 42000000 exynos4412-fs4412.dtb;bootm 41000000

- 42000000

bootdelay=3

ethact=dm9000

ethaddr=11:22:33:44:55:66

fileaddr=42000000

filesize=8636

gatewayip=192.168.0.1

ipaddr=192.168.0.200

netmask=255.255.255.0

serverip=192.168.0.150

stderr=serial

stdin=serial

stdout=serial

十一、设置开发板启动的时候自动执行的命令:

setenv bootcmd tftp41000000 uImage\;tftp 43000000 exynos4412-fs4412.dtb\;bootm 41000000 - 43000000

告诉操作系统系统启动后,挂载根文件系统的方式(网络方式挂载)

setenv bootargs root=/dev/nfs nfsroot=192.168.0.150:/home/ubuntu/fs4412/fs/rootfs,proto=tcp,nfsvers=3,nolock  rw console=ttySAC2,115200  init=/linuxrc  ip=192.168.0.200

设置开发板启动后,自动执行的命令(uboot 倒计时完成之后)

 setenv bootcmd tftp 41000000 uImage\;tftp42000000 exynos4412-fs4412.dtb\;tftp 43000000 ramdisk.img\;bootm 4100000043000000 42000000

setenv bootargs    (为空)

十二、制作成ramdisk之后,pl2303驱动无法自动创建设备节点的问题

遇到问题:nfs为根文件系统启动时一切正常。。。制作ramdisk后,pl2303串口无法打开pl2303驱动未在/dev/ 目录下创建设备文件/dev/ttyUSB0 nfs挂载文件系统时,会自动创建。

解决方法:

    start.sh中写入命令 mknod /dev/ttyUSB0c 188 0 命令手动创建设备节点。(启动服务器程序之前)

十三、从EMMC加载内核和文件系统(产品发布阶段)

 

[1]烧写内核镜像到EMMC

  tftp 41000000  uImage 下载到内存

  movi write  kernel  41000000 将内存的数据写到EMMC

 

[2]烧写设备树文件到EMMC

  tftp 41000000 exynos4412-fs4412.dtb  下载到内存

  movi write  dtb  41000000 将内存的数据写到EMMC

 

[3]烧写文件系统镜像到EMMC

  tftp 41000000  ramdisk.img

  movi write  rootfs  41000000 1000000(大小10M)

 

  1kB 1024 = 2^10

  1MB 2^20

  1GB 2^30     

                  0x300000 = 3 x2^20 = 3M

     0x40000000   内存大小1GB   结束地址:1 x 2^28 * 2^2 =10000000 * 4 = 0x40000000 => 0x80000000

 [4]设置启动参数

  setenv bootcmd movi read kernel41000000\;movi read dtb 42000000\;movi read rootfs 43000000 1000000\;bootm41000000 43000000 42000000

  saveenv


(本人技术经验浅薄,文中难免有疏漏错误之处,请在评论中予以提醒,共同进步,非常感谢!)