模拟智能家居所遇问题汇总------持续更新
主机开发环境: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(本人技术经验浅薄,文中难免有疏漏错误之处,请在评论中予以提醒,共同进步,非常感谢!)