微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > 嵌入式系统设计讨论 > 从零制作文件系统到jz2440,使其支持telnet , ftp 和tftp

从零制作文件系统到jz2440,使其支持telnet , ftp 和tftp

时间:10-02 整理:3721RD 点击:

开发板:jz2440

主机linux:ubuntu 9.10(资料光盘那个)

内核版本:linux2.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出现错误:


方法同上,将nandwrite,nanddump选项去掉。

继续make又出现错误:


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

继续make,又出现错误:


方法同上:

Networking Utilities  --->   

udhcp server (udhcpd)

[ ] udhcp server (udhcpd)

终于make成功

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

$ makeCONFIG_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

$ mkdirlib

$ cd /work/tools/gcc-3.4.5-glibc-2.3.6/arm-linux/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

ifconfigeth0 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 xjflinux-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寸源码
$ cp config_ok .config
$ make uImage

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

先设置网络

set gatewayip192.168.1.1  //设置网关

set netmask255.255.255.0 //设置子网掩码

set ipaddr192.168.1.111   //设置uboot阶段的开发板ip

set serverip192.168.1.170 //设置服务器ip

ping 192.168.1.170

通了


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/rootfsip=192.168.1.100:192.168.1.199:192.168.1.255:255.255.255.0::eth0 init=/linuxrcconsole=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.如果一个用户没有密码,那它在linux系统中就是伪用户,也就是不存在的用户,当然也无法用这个用户登录。现在已经使用NFS启动成功,那么顺便设置一下root用户的密码(本操作在开发板上完成)。

在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:

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


我设的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 LocalFile下的1.docx文件

传到开发板


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





至此,文件系统已经支持telnet ftp tftp,再用NFS启动一下,确保没问题后烧到开发板//当然也可以不烧到开发板,一直用NFS。

烧到开发板步骤如下:

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

$ cdDevelopment_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:

setenvbootargs '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.启动开发板

$ boot

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

我是怎么学好硬件的?虽然在学校里学习了很多电子知识,但是找工作的时候,没人问这些,就连mos管、比较器、开关电源、我都不知道是什么、面试的时候可想而知,于是我就问我们老师这该怎么办、他说要想短时间内提升、建议我看张飞硬件、当时也不知道这个人、就在网上把第一部看了,这一看不要紧,因为张飞老师幽默风趣的讲课方式、把大学四年不懂得以深入浅出、通俗易懂的方式将给了我们这些初入职场的小白、于是我又在张老师那里购买了10部、虽然花了1000多、但他值这个价、真后悔大学的时候怎么不早接触张飞的视频呢!而且每次看这个视频都有一种追剧的冲动、都舍不得看完!
    因为有很多和我一样类似经历的同学、所以在这里我把我买的视频给大家,大家只需要给一个辛苦费就行,只希望对大家有帮助。为信 7580 72545      可以向我咨询硬件的问题哦


Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top