|
BeagleBone 学习笔记05_2012_09_20
[复制链接]
嗯,继续开贴,说说beaglebone自带系统Angstrom
1)简单的系统命令,列举两个例子:uname -a & cat /proc/cpuinfo
2)测试网络,将写好的SocketServer.c文件放到beaglebone生成的u盘中,这里新建文件夹test。
使用命令mount /dev/disk/by-label/BEAGLEBONE /mnt/挂载u盘
使用cd test进入文件夹,ls命令查看源文件
3)编译代码,使用gcc SocketServer.c -o ethernet编译
4)执行./ethernet
5)打开tcp&udp debug工具测试,连接到192.168.14.25 端口1234
6)此时可以看到new connection (程序默认可以同时支持多个连接,有最大限制,宏定义)
7)通过debug工具给beagle发送字符hello eeworld!并回发给debug工具(该调试工具在周立功网站上可下载)
8)再新建一个连接,亦可进行数据收发。
9)连接建立和取消会自动识别,同时同一个连接连续连接只识别为一个用户连接,避免连续访问导致崩溃。
嗯,基本的就是这样啦,写了一个简单的c/s测试程序,beaglebone上的是服务程序,贴出核心代码。- /* 初始化文件描述符 */
- do
- {
- unsigned int __i;
- fd_set *__arr = (&fdsr);
- for (__i = 0; __i < sizeof (fd_set) / sizeof (__fd_mask); ++__i)
- {
- __FDS_BITS (__arr)[__i] = 0;
- }
- } while (0);
- //FD_ZERO(&fdsr);
- FD_SET(sock_fd, &fdsr);
- /* 超时时间设置 */
- tv.tv_sec = 30;
- tv.tv_usec = 0;
- /* 添加活动连接 */
- for (i = 0; i < BACKLOG; i++)
- {
- if (fd_A[i] != 0)
- {
- FD_SET(fd_A[i], &fdsr);
- }
- }
- ret = select(maxsock + 1, &fdsr, NULL, NULL, &tv);
- if (ret < 0)
- {
- perror("select");
- break;
- }
- else if (ret == 0)
- {
- printf("timeout\n");
- continue;
- }
复制代码- /* 检查是否有一个新的连接到来 */
- if (FD_ISSET(sock_fd, &fdsr))
- {
- new_fd = accept(sock_fd, (struct sockaddr *)&client_addr, &sin_size);
- if (new_fd <= 0)
- {
- perror("accept");
- continue;
- }
- /* 添加到fd队列 */
- if (conn_amount < BACKLOG)
- {
- for(i = 0;i < BACKLOG;i++)
- {
- if(fd_A[i] == 0)
- {
- fd_A[i] = new_fd;
- break;
- }
- }
- conn_amount++;
- printf("new connection client[%d] %s:%d\n", conn_amount,inet_ntoa(client_addr.sin_addr), ntohs(client_addr.sin_port));
- if (new_fd > maxsock)
- {
- maxsock = new_fd;
- }
- }
- else
- {
- printf("max connections arrive, exit\n");
- send(new_fd, "good-bey!\n", 11, 0);
- close(new_fd);
- continue;
- }
- }
复制代码 嗯,好了maylove别催我啦,程序都是testcode 对不起坛友了。国庆回家呆了7天,原理图还没画呢。。。看来要悲剧啊,先整点软的上来了
|
|