zoukankan      html  css  js  c++  java
  • [置顶] 从零制作文件系统到JZ2440,使其支持telnet , ftp 和tftp

    转自:http://mp.weixin.qq.com/s?__biz=MzAxNTAyOTczMw==&mid=2649328515&idx=1&sn=5849fba4b44ec28a15217edaf629bc34&chksm=83976f09b4e0e61ff356124dd8a4befd126d213f15a769afc067db2aa3391e452fd8a5b65b1f&mpshare=1&scene=23&srcid=0612S5eJpICGarjpiL39WbUo#rd


    该教程参考了<<嵌入式Linux应用开发完全手册>>构建文件系统章节和<<jz2440v2_v3开发板(4.3寸LCD)使用手册>>编译内核章节,篇幅较长,建议转发收藏观看。


    开发板:JZ2440

    主机linux:Ubuntu 9.10(资料光盘配的那个)

    内核:Linux 2.6.22.6

    交叉编译器:arm-linux-gcc 3.4.5(也可以用毕业班4.3.2编译器,不过笔者没找对lib,失败了,先不深究)

    busybox:busybox-1.21.0.tar.bz2

    (本想用韦老师视频用的busybox -1.17.0,后来发现其不支持ftp和tftp,遂放弃)

     

    1,下载busybox 1.21.0: https://busybox.net/downloads/

    2,借助filezilla把文件上传到ubuntu

    3,解压busybox

    $tar jxf busybox-1.21.0.tar.bz2

    $cd busybox-1.21.0/

    先添加比较好用的tab工具(默认已经添加):

    make menuconfig

    BusyboxSettings  --->

        Busybox Library Tuning  --->

            [*]  Tab completion


    4,  编译和安装busybox

    编译前先修改busybox根目录的Makefile,使用交叉编译器:

    ARCH           ?= $(SUBARCH)

    CROSS_COMPILE   ?=

    改为:

    ARCH            ?= arm

    CROSS_COMPILE   ?= arm-linux-

    make

    出现错误:

    解决方法:
    配置busybox去掉 ionice 选项

    $  makemeunconfig


    选择下面的菜单:
    Miscellaneous Utilities  --->    
    [ *]
    ionice                                    
    按空格去掉这个选项。改成下面这样。
    [ ]ionice         

    保存退出

    继续make出现错误:

    方法同上,nandwritenanddump选项去掉。

    继续make又出现错误:

    方法同上,ubi开头的选项都去掉

    继续make,又出现错误:

    方法同上:

    Networking Utilities  --->    

    [*] udhcp server (udhcpd)

    改为:

    [] udhcp server (udhcpd)

    终于make成功

    最后执行“make CONFIG_PREFIX=DIR install”将busybox安装到DIR指定的目录下。

    $ make CONFIG_PREFIX = /work/busybox-1.21.0/rootfs install

     

    一切完成后将在/work/busybox-1.21.0/rootfs 生成如下文件、目录:

    drwxr-xr-x 2 book book 40962017-05-28 04:59 bin

    lrwxrwxrwx 1 book book 11 2017-05-28 04:59 linuxrc ->bin/busybox

    drwxr-xr-x 2 book book 40962017-05-28 04:59 sbin

    drwxr-xr-x 4 book book 40962017-05-28 04:59 usr


    5.安装glibc库

    在开发板上只需要加载器和动态库,假设要构建的根文件系统目录为/work/busybox-1.21.0/rootfs,如下操作即可:

    $ cd /work/busybox-1.21.0/rootfs

    $ mkdir  lib

    $ cd /usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/lib

    $ cp*.so* –d /work/busybox-1.21.0/rootfs/lib


    6.构建etc目录

    ① 创建etc/inittab文件

    $ cd /work/busybox-1.21.0/rootfs

    $ mkdir etc

    $ cd etc

    $ touch inittab

    $ sudo chmod 777 inittab

    $ vi inittab,内容为:

    #/etc/inittab

    ::sysinit:/etc/init.d/rcS

    ttySAC0::askfirst:-/bin/sh

    ::ctrlaltdel:/sbin/reboot

    ::shutdown:/bin/umount -a –r


    ②创建etc/init.d/rcS文件:

    $mkdir init.d

    $cd init.d

    $touch rcS

    $sudo chmod 777 rcS

    $ vi rcS, 内容为:

    mount   -a

    mkdir  /dev/pts

    mount-t devpts devpts /dev/pts

    echo/sbin/mdev > /proc/sys/kernel/hotplug

    ifconfig  eth0 192.168.1.100

    mdev -s

     

     创建etc/fstab文件

    $cd ..

    $touch fstab

    $sudo chmod 777 fstab

    $vi fstab, 内容为:

    # device    mount-point    type   options        dump fsck order

    proc          /proc        proc   defaults        0    0

    tmpfs         /tmp         tmpfs  defaults        0    0

    sysfs         /sys         sysfs  defaults           0    0

    tmpfs         /dev         tmpfs  defaults        0    0


       构建dev目录

    $ mkdir –p /work/busybox-1.21.0/rootfs/dev

    $ cd /work/busybox-1.21.0/rootfs/dev

    $ sudo mknod console c 5 1

    $ sudo mknod null c 1 3

    $ sudo mknod ttySAC0 c 204 64

    $ sudo mknod mtdblock0 b 31 0

    $ sudo mknod mtdblock1 b 31 1

    $ sudo mknod mtdblock2 b 31 2


       构建其他目录

    其他目录可以是空目录,比如proc、mnt、tmp、sys、root等,如下创建:

    $ cd /work/busybox-1.21.0/rootfs

    $mkdir proc mnt tmp sys root


       启动板子必须要有内核,我们先编译uImage

    上传linux 2.6.22.6到ubuntu,解压打补丁编译:


    $ tar xjf linux-2.6.22.6.tar.bz2
    $ cd linux-2.6.22.6
    $ patch -p1 < ../linux-2.6.22.6_jz2440.patch
    $ mv ../4.3寸LCD_mach-smdk2440.carch/arm/mach-s3c2440/mach-smdk2440.c // 替换4.3寸LCD驱动
    $ cp config_ok .config
    $ make uImage


       进入uboot,tftp下载uImage到jz2440,并烧写

    先设置网络

    set gatewayip 192.168.1.1   //设置网关

    set netmask 255.255.255.0 //设置子网掩码

    set ipaddr 192.168.1.111    //设置uboot阶段的开发板ip

    set serverip 192.168.1.170 //设置服务器ip

    ping 192.168.1.17             

    通了


    tftp 30000000 uImage //必须先PING通windows

    nand erase kernel

    nand write.jffs2 30000000 kernel

    设置boot命令用到的bootcmd

    set bootcmd nand read.jffs2 0x30007FC0 kernel; bootm 0x30007FC0

    save

       NFS启动jz2440 //把文件系统先放到NFS目录上测试

    a.先设置nfs目录:

    sudo vi /etc/exports

    追加一行:/work/busybox-1.21.0/rootfs   *(rw,sync,no_root_squash)

     

    b. 设置bootargs

    set bootargs noinitrd root=/dev/nfs nfsroot=192.168.1.199:/work/busybox-1.21.0/rootfs ip=192.168.1.100:192.168.1.199:192.168.1.255:255.255.255.0::eth0 init=/linuxrc console=ttySAC0,115200

    save

    说明:

    192.168.1.100是linux系统起来后的开发板ip

    192.168.1.199是作为NFS服务器的ubuntu ip

    192.168.1.255是ubuntu 网关

    /work/busybox-1.21.0/rootfs是ubuntu /etc/exports设置的nfs目录

    255.255.255.0是ubuntu子网掩码


    boot卡在

    解决方法:

    先在ubuntu上测试NFS

    sudo mount -t nfs -o nolock 192.168.1.199: /work/busybox-1.21.0/rootfs/mnt

    出现错误:

    解决方法:

    把所有读写这个NFS文件的进程都kill

    sudo fuser -k /mnt

    挂载成功:

    重启开发板启动成功:

    7. 在etc目录下增加passwd、group


    $ cd /work/busybox-1.21.0/rootfs/etc

    $ touch passwd

    $ touch group

    $ sudo chmod 777passwd

    $ sudo chmod 777 group

    $ vi passwd ,内容为:

    root:x:0:0:root:/root:/bin/sh

    $ vi group,内容为:

    root:x:0:

    若一个用户没有密码,它在linux系统中就是不存在的用户,无法用这个用户登录。现在已经使用NFS启动成功,顺便设置一下root用户密码(本操作在开发板上完成)

    添加终端登录用户验证功能

    笔者设的root密码是123456


    8. 添加telnetd功能

    busybox默认已经支持telnetd和telnet,开发板只要启动telnet服务

    #telnetd

    securecrt快速连接选择Telnet协议、主机名、端口:

    输入用户名root,密码123456即可登录开发板:

    酷毙了有木有?!


    9. 添加ftp功能

    制作文件系统时新建/etc/inetd.conf

    cd /work/busybox-1.21.0/rootfs/etc

    $touch inetd.conf

    $chmod 777 inetd.conf

    $vi inetd.conf,内容如下

    21 stream tcpnowait root ftpd ftpd -w /


    开发板开启ftpd

    $inetd 

    便可以用filezilla输入主机用户名密码端口(默认21),开发板window之间互传文件了


    10. 添加tftp功能

    跟ftp类似,也是把配置信息写入脚本。

    $vi inetd.conf,追加一行:

    69 dgram udpnowait  root  /usr/sbin/tftpd  tftpd -l

    测试tftp

    window打开tftpd32(资料光盘有此软件),选择Tftp Client,如图输入Host ,Port和Local File(笔者的是tftp软件所在目录)

    开发板执行tftp -g -r 1.docx 192.168.1.170 把window Local File下的1.docx文件

    传到开发板:

    当然也可以把开发板上的文件上传到windows,如图把开发板etc目录下的fstab文件上传到 window Local File目录



    至此,该文件系统已经支持telnet ftp tftp,再用NFS启动一下,确保没问题后再烧到开发板

    //当然也可以一直用NFS,文件系统不烧进开发板。


    烧到开发板步骤如下:

    1.把毕业班的yaffs2源码上传到ubuntu解压后,进入utils目录

    $ cd Development_util_ok/

    $ cd yaffs2/

    $ cd utils/

    $ make

    $ sudo cp mkyaffsimage /usr/local/bin

    $ cd /work/busybox-1.21.0/

    $ mkyaffs2image rootfs 20170607.yaffs2  


    2. 把20170607.yaffs2 拷贝到window tftp软件所在目录,设置bootargs:

    setenv bootargs 'root=/dev/mtdblock3 noinitrd init=/linuxrc console=ttySAC0,115200 '

    save


    3.下载文件系统 //前提是开发板能PING window

    $ tftp 30000000 20170607.yaffs2

    $ nand erase root

    $ nand write.yaffs 30000000 0x00260000 $(filesize)


    4. 启动Linux

    $ boot

    只要开发板启动并做了相关设置后,便可以使用telnet ftp tftp了。


    完毕。



  • 相关阅读:
    【MFC初学】
    【递归】【3月周赛1】【Problem B】
    不管ACM是不是屠龙之技
    【贪心+背包】【HDU2546】【饭卡】
    【精度问题】【HDU2899】Strange fuction
    【泛化物品】【HDU1712】【ACboy needs your help】
    【递推】【HDU2585】【hotel】
    【二进制拆分多重背包】【HDU1059】【Dividing】
    【水:最长公共子序列】【HDU1159】【Common Subsequence】
    【递推+矩阵快速幂】【HDU2604】【Queuing】
  • 原文地址:https://www.cnblogs.com/alan666/p/8311790.html
Copyright © 2011-2022 走看看