mini嵌入式web服务器搭建

.

前期准备

Windows系统下

安装虚拟机

  • 安装以Linux为内核的操作系统(如Ubuntu)

安装secureCRT超级终端

  • 用于查看开发板输出的调试信息并与开发板交互

安装DNW

安装Source Insight

  • 在Windows下查看及其修改代码

虚拟机系统下

设置文件共享

安装交叉编译工具链,并导入环境变量

解压

  • mkdir /usr/local/arm/ 创建一个新文件夹,用于存放编译链工具
  • mv /mnt/hgfs/Winshare/arm-2009q3.tar.bz2 /usr/local/arm/把下载到的编译工具链压缩包移动到上面的文件夹
  • cd /usr/local/arm/
  • tar -jxvf arm-2009q3.tar.bz2

安装

  • mv /mnt/hgfs/Winshare/mk-arm-linux.sh /usr/local/arm/arm-2009q3/bin 根据自己的共享目录名字改动
  • cd /usr/local/arm/arm-2009q3/bin
  • source mk-arm-linux.sh

导入环境变量

  • gedit ~/.bashrc打开这个文件,在最下面添加以下一行
    • export PATH=/usr/local/arm/arm-2009q3/bin:$PATH
  • source ~/.bashrc

64位兼容32位

  • 如果Ubuntu是64位的
1
2
3
4
sudo dpkg --add-architecture i386
sudo apt-get update
sudo apt-get install libc6:i386 libncurses5:i386 libstdc++6:i386
sudo ./adb

测试

  • 在任意路径下敲arm-linux-gcc -v
  • 返回信息gcc version 4.4.1
  • 表示你已经安装成功了

安装NFS

安装

  • sudo apt-get install nfs-kernel-server -y

重启

  • service rpcbind restart
  • service nfs-kernel-server restart

建立文件目录

  • mkdir /opt/Rootfs_TQ210 # 建立根文件目录
  • chmod 777 -R /opt/Rootfs_TQ210
  • mkdir /opt1 #建立访问目录,位置不固定

配置

  • sudo vi /etc/exports
    • /opt/Rootfs_TQ210 *(rw,sync,no_root_squash,no_subtree_check) #在文本最后加上

      /opt/Rootfs_TQ210目录是与nfs服务客户端共享的目录,*代表允许所有的网段访问
      rw:挂载此目录的客户端对该共享目录具有读写权限
      sync:资料同步写入内存和硬盘
      no_root_squash:客户机用root访问该共享文件夹时,不映射root用户(root_squash:客户机用root用户访问该共享文件夹时,将root用户映射成匿名用户)
      no_subtree_check:不检查父目录的权限

测试

  • sudo exportfs -r #更新文件
  • sudo showmount localhost -e #下面是显示信息
    • Export list for Ubuntu2jmlin:
    • /opt/Rootfs_TQ210 *

本地挂载

  • mount -t nfs -o nolock localhost:/opt/Rootfs_TQ210 /opt1 #挂载Rootfs_TQ210目录到/opt1目录下

Uboot

获取源码

  • 开发板光盘/bootloader/uboot_TQ210_1.3.4_V1.7.tar.bz2
  • 复制到Ubuntu/opt/目录下
  • 解压tar -jxvf uboot_TQ210_1.3.4_V1.7.tar.bz2

源码检查

清理

  • make distclean

修改

  • 交叉编译工具链路径
  • vi Makefile # 在相应地方(149)添加
  • CROSS_COMPILE = arm-linux-

编译前配置

  • make TQ210_config

编译

  • make -j8

烧录

  • 使用DNW烧录

进入Uboot命令命令行

  • 开发板开机按下空格键,进入天嵌制作的操作菜单
  • 按下字母q退出天嵌的操作菜单,进入uboot命令行

设置uboot环境变量

本地IP地址和服务器IP地址要在同一网段

1
2
3
4
5
6
7
8
9
set ipaddr 192.168.0.105 # 设置本地IP地址
set gatewayip 192.168.0.1 # 设置网关
set serverip 192.168.0.101 # 设置服务器IP地址
set nfsipaddr 192.168.0.105 # 设置NFS IP地址
set nfsserverip 192.168.0.101 # 设置NFS 服务器IP地址
set nfs_dir /opt/rootfs_TQ210 # 设置NFS 文件夹
set bootargs root=/dev/nfs nfsroot=192.168.0.101:/opt/rootfs_TQ210 ip=192.168.0.105:192.168.0.101:192.168.0.1:255.255.255.0::eth0:off init=/linuxrc console=ttySAC0,115200
save


Kernel

获取源码

  • 开发板光盘/Linux资源/Linux源码包/3.0.8/Kernel_3.0.8_TQ210_for_Linux_v2.2.tar.bz2
  • 复制到Ubuntu /opt/ 目录下
  • 解压tar -jxvf Kernel_3.0.8_TQ210_for_Linux_v2.2.tar.bz2

源码检查

清理

  • make distclean

编译前配置

  • cp config_for_TQ210_Linux_v2.1_CoreB .config
  • 检查Makefile所配置的交叉编译链、是否为arm架构

配置生成默认文件

  • cp config_for_TQ210_Linux_v2.1_CoreB .config #直接使用天嵌已经给的默认配置文件

kernel 裁剪

  • make menuconfig

    • 如果是第一次使用的话,可能会出现错误
    • 根据错误,需要下载ncurses,先执行sudo apt-get install libncurses5-dev来下载,然后再make menuconfig
  • Device Drivers —>

    • Multimedia support —>
      • Video capture adapters —>
        • [*] Samsung Camera Interface (FIMC) driver // 移除摄像头驱动
          • [ ] camera ov3640
          • [ ] camera ov9650
          • [ ] camera tvp5150
          • [ ] camera saa7113
        • [*] Samsung TV Driver
          • [ ] HDMI CEC driver support // 移除HDMI遥控驱动
          • [*] HDMI HPD driver support
    • HID Devices
      • [ ] USB Human Interface Device (full HID) support // 移除鼠标驱动
    • Networking support
      • [ ] Bluetooth subsystem support // 移除蓝牙驱动
  • File systems —>

    • [*] Network File Systems —>
      • <*> NFS client support // 添加NFS驱动
        • [*] NFS client support for NFS version 3
          • [*] NFS client support for the NFSv3 ACL protocol extension
        • [*] NFS client support for NFS version 4 (EXPERIMENTAL)
          • [ ] NFS client support for NFSv4.1 (DEVELOPER ONLY)
        • [*] Root file system on NFS

RootFS

获取源码

  • 开发板光盘/Linux资源/Linux源码包/rootfs_linux_v1.6_CoreB_src_20140415.tar.bz2
  • 复制到Ubuntu /opt/ 目录下
  • 解压tar -jxvf rootfs_linux_v1.6_CoreB_src_20140415.tar.bz2

源码检查

  • 检查Makefile所配置的交叉编译链、是否为arm架构
  • 设置安装目录为 /opt/Rootfs_TQ210

编译

  • make

安装

  • make install

Web服务器移植

移植BOA-0.94.13

获取源码

  • cd /opt
  • wget https://nchc.dl.sourceforge.net/project/boa/boa/0.94.13/boa-0.94.13.tar.gz
  • tar -zxvf boa-0.94.13.tar.gz

编译前配置

  • cd src
  • ./configure
  • vi Makefile
    • CCCPP分别修改为CC=arm-linux-gccCPP=arm-linux-g++ -E
  • vi boa.c
    在行225到227,将其注释掉

    1
    2
    3
    if (setuid(0) != -1) {
    DIE("icky Linux kernel bug!");
    }
  • vi compat.h

  • 把120行修改为#define TIMEZONE_OFFSEST(foo) foo->tm_gmtoff

编译

  • make

    Error

  • 可能出现错误make: yacc: Command not found
    • sudo apt-get install -y byacc
  • 可能出现错误make: lex: Command not found
    • sudo apt-get install -y flex

      优化

  • arm-linux-strip boa

移植cgic库

获取源码

  • cd /opt
  • wget https://boutell.com/cgic/cgic205.tar.gz
  • tar -zxvf cgic205.tar.gz

编译前配置

  • vi Makefile
    以下为修改内容
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    CC=arm-linux-gcc
    AR=arm-linux-ar
    RANLIB=arm-linux-ranlib
    cp libcgic.a /usr/local/arm/arm-2009q3/arm-none-linux-gnueabi/libc/armv4t/lib # 这两行根据自己所安装
    cp cgic.h /usr/local/arm/arm-2009q3/arm-none-linux-gnueabi/libc/usr/include # 交叉编译工具链位置改动
    $(CC) $(CFLAGS) cgictest.o -o cgictest.cgi $(LIBS)
    $(CC) $(CFLAGS) capture.o -o capture $(LIBS)

编译

  • make

优化

  • arm-linux-strip capture

配置Web服务器

配置BOA

  • cd /opt/roorfs_TQ210
  • mkdir web etc/boa # 在根文件系统新建web/、etc/boa/目录
  • cp /opt/boa-0.94.13/src/boa rootfs_TQ210/sbin
  • cp /opt/boa-0.94.13/boa.conf rootfs_TQ210/etc/boa
  • 修改boa.conf文件vi etc/boa/boa.conf
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
Port 80
#Listen 192.168.0.105
User root
Group root
#ServerAdmin root@localhost
#ErrorLog /dev/null
ErrorLog /dev/console
AccessLog /dev/null
#UseLocaltime
#VerboseCGILogs
#ServerName www.your.org.here
ServerName jmlin_Server
#VirtualHost
DocumentRoot /web
#UserDir public_html
DirectoryIndex JMLin.html
#DirectoryMaker /usr/lib/boa/boa_indexer
# DirectoryCache /var/spool/boa/dircache
KeepAliveMax 1000
KeepAliveTimeout 10
MimeTypes /etc/mime.types
DefaultType text/plain
CGIPath /bin
AddType application/x-httpd-cgi cgi
#Alias /doc /usr/doc
#ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
  • cp /etc/mime.types /opt/rootfs_TQ210/etc

配置cgic库

  • 建立cgi-bin目录 mkdir /opt/rootfs_TQ210/web/cig-bin
  • cp /opt/cgic205/capture /opt/rootfs_TQ210/web/cgi-bin/
  • cp /opt/cgic205/cgictest.cgi /opt/rootfs_TQ210/web/cgi-bin/

测试

静态网页测试

  • 在PC段网页浏览器输入地址:192.168.0.105

CGI脚本测试

  • 在PC段网页浏览器输入地址:http://192.168.0.105/cgi-bin/cgictest.cgi

  • 在PC段网页浏览器输入地址:http://192.168.0.105/cgi-bin/helloweb.cgi

:本文内容部分来自互联网整理,部分来自个人经验总结;本文将持续收集更新,欢迎留言补充!

要是觉得不错,就鼓励一下吧!