前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【教程】从零制作文件系统到jz2440,使其支持telnet , ftp 和tftp

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

作者头像
韦东山
发布2020-09-30 10:30:17
2.3K0
发布2020-09-30 10:30:17
举报
文章被收录于专栏:韦东山嵌入式韦东山嵌入式

开发板: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

代码语言:javascript
复制
$tar jxf busybox-1.21.0.tar.bz2
$cd busybox-1.21.0/

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

代码语言:javascript
复制

 $ make menuconfig 
 Busybox Settings —> 
 Busybox Library Tuning —> 
 [*] Tab completion

4, 编译和安装busybox

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

代码语言:javascript
复制
ARCH ?= $(SUBARCH) 
CROSS_COMPILE ?= 
改为: 
ARCH ?= arm 
CROSS_COMPILE ?= arm-linux-

make 出现错误: 解决方法: 配置busybox去掉 ionice 选项。 make meunconfig 选择下面的菜单: 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指定的目录下。

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

代码语言:javascript
复制
drwxr-xr-x 2 book book 4096 2017-05-28 04:59 bin 
lrwxrwxrwx 1 book book 11 2017-05-28 04:59 linuxrc -> bin/busybox 
drwxr-xr-x 2 book book 4096 2017-05-28 04:59 sbin 
drwxr-xr-x 4 book book 4096 2017-05-28 04:59 usr

5.安装glibc库

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

代码语言:javascript
复制
$ mkdir lib
$ 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文件

代码语言:javascript
复制
$cd /work/busybox-1.21.0/rootfs
$mkdir etc
$cd etc
$touch inittab
$sudo chmod 777 inittab
$vi inittab,内容为: 
 ::sysinit:/etc/init.d/rcS 
 ttySAC0::askfirst:-/bin/sh 
 ::ctrlaltdel:/sbin/reboot 
 ::shutdown:/bin/umount -a –r

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

代码语言:javascript
复制
$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文件

代码语言:javascript
复制
$cd ..
 touchfstab <script type="math/tex" id="MathJax-Element-4">touch fstab </script>sudo chmod 777 fstab
$vi fstab, 内容为: 
 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目录

代码语言:javascript
复制
$ 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等,如下创建:

代码语言:javascript
复制
$ cd /work/busybox-1.21.0/rootfs
$ mkdir proc mnt tmp sys root

代码语言:javascript
复制
⑥ 启动板子必须要有内核,我们先编译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.c arch/arm/mach-s3c2440/mach-smdk2440.c // 替换4.3寸源码
$ cp config_ok .config
$ make uImage

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

先设置网络

代码语言:javascript
复制
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.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/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 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

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

代码语言:javascript
复制
$ cd /work/busybox-1.21.0/rootfs/etc
$ touch passwd
$ touch group
$ sudo chmod 777 passwd
$ 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 tcp nowait root ftpd ftpd -w / 开发板开启ftpd $inetd 就可以用filezilla输入主机用户名密码端口(默认21),开发板window之间互传文件了

这里写图片描述
这里写图片描述

10.添加tftp功能

跟ftp类似,也是把配置信息写入脚本。 $vi inetd.conf,追加一行: 69 dgram udp nowait 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目录

代码语言:javascript
复制

$ 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

代码语言:javascript
复制
$tftp 30000000 20170607.yaffs2
$nand erase root
 nandwrite.yaffs300000000x00260000 <script type="math/tex" id="MathJax-Element-5">nand write.yaffs 30000000 0x00260000 </script>(filesize)

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

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017-06-09 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1, 下载busybox 1.21.0: https: //busybox.net/downloads/
  • 2, 借助filezilla把文件上传到ubuntu
  • 3,解压busybox
  • 4, 编译和安装busybox
  • 5.安装glibc库
  • 6.构建etc目录
    • ①创建etc/inittab文件
      • ②创建etc/init.d/rcS文件:
        • ③ 创建etc/fstab文件
        • ④ 构建dev目录
        • ⑤ 构建其他目录
        • ⑦ 进入uboot,tftp下载uImage到jz2440,并烧写
        • ⑧ NFS启动jz2440 //把文件系统先放到NFS目录上测试
        • 7.在etc目录下增加passwd、group
        • 8. 添加telnetd功能
        • 9.添加ftp功能
        • 10.添加tftp功能
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档