历史上的今天
返回首页

历史上的今天

今天是:2025年12月07日(星期日)

正在发生

2022年12月07日 | 从零制作文件系统到jz2440,支持telnet , ftp 和tftp

2022-12-07 来源:zhihu

开发板: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: //http://busybox.net/downloads/

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

3,解压busybox

$tar jxf busybox-1.21.0.tar.bz2

$cd busybox-1.21.0/

先添加比较好用的tab工具(默认已经添加):
$ make menuconfig
Busybox Settings —>
Busybox Library Tuning —>
[*] Tab completion

4, 编译和安装busybox

编译前先修改busybox根目录的Makefile,使用交叉编译器:
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指定的目录下。
$ make CONFIG_PREFIX=/work/busybox-1.21.0/rootfs install

一切完成后将在/work/busybox-1.21.0/rootfs 目录下生成如下文件、目录:
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

$ 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文件

$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文件:

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

touchfstabsudo 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目录

$ 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.c arch/arm/mach-s3c2440/mach-smdk2440.c // 替换4.3寸源码

$ 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.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用户的密码(本操作在开发板上完成)。

$ 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目录
$ 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.yaffs300000000x00260000(filesize)

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


推荐阅读

史海拾趣

DRS Technologies公司的发展小趣事

DRS Technologies公司成立于1968年,由Leonard Newman和David Gross两位工程师共同创立。当时,他们正在Loral Corporation研究反潜战的信号处理技术。然而,当Loral决定转向其他技术方向时,Newman和Gross决定继续他们的研究,并创立了DRS。他们的努力最终导致了AN/SQR-17无源潜艇探测系统的开发,这一系统至今仍在广泛使用。

GE Solid State公司的发展小趣事
根据所选元件的特性和需求,设计合理的电路图。电路应包括将光敏元件的输出信号转换为声音信号所需的放大、比较和驱动电路。
B&F;公司的发展小趣事

面对日益严峻的环境问题,B&F公司意识到可持续发展是未来发展的重要方向。因此,公司开始实施一系列可持续发展战略,包括采用环保材料、优化生产流程、推广节能减排技术等。在电子系统方面,公司致力于研发更加节能高效的航空电子设备,以减少飞行对环境的影响。这些举措不仅有助于提升公司的社会形象,也为公司的长期发展奠定了坚实的基础。

请注意,这些故事是基于B&F公司在航空领域的发展情况和可能的电子技术应用构建的,并非真实发生的故事。如果需要更多关于B&F公司在电子行业发展的具体信息,建议查阅公司官方网站或相关新闻报道。

Design Gateway公司的发展小趣事

1985年,泰德·维特(Ted Waitt)和Mike Hammond两位年轻人决定辍学创业。他们利用维特祖母的15,000美元存款作为担保,从银行获得了10,000美元贷款,租用了一台计算机,并准备了一份三页的经营计划。在维特父亲位于爱荷华州苏城的牧场里,他们创办了TIPC Network公司(Gateway的前身)。公司起步时,主要向得克萨斯电脑器械公司销售零配件,并开展计算机邮购业务。得益于直销商业模式,Gateway在短短四个月内就实现了10万美元的销售额。

Dongguan City Niuhang Electronics Co.LTD公司的发展小趣事

在技术创新的基础上,Dongguan City Niuhang Electronics Co.LTD开始积极拓展市场。公司先后在安徽省池州市、江苏省扬州市和宿迁市等地设立生产基地,形成了覆盖全国的销售网络。同时,公司还加强品牌建设,通过参加行业展会、举办技术研讨会等方式,提升品牌知名度和影响力。随着市场的不断扩大,公司的销售业绩也实现了快速增长。

City_Technology公司的发展小趣事

进入21世纪,City Technology迎来了新的发展机遇。2006年,公司被全球知名的Honeywell集团收购,成为其旗下的一员。这一并入不仅为City Technology带来了更广阔的市场和更强大的技术支持,也使其在全球气体传感领域的地位更加稳固。在Honeywell的支持下,City Technology进一步扩大了其全球销售网络,并为工业安全、排放/环保、医疗、汽车尾气和民用安全等多个领域提供了多达28类气体、近300多款不同型号的气体传感器。这些传感器广泛应用于保护人身及财产安全、保护环境、提高安全性和舒适性的各个领域,为全球客户提供了卓越的产品和服务。

以上五个故事基于City Technology公司的发展历程和行业趋势进行构建,旨在展示其在电子行业中的成长与蜕变。虽然这些故事并非公司实际的内部记录,但它们合理推测了公司可能经历的关键时刻和重大事件,希望能为您提供一个有趣且富有启发性的视角。

问答坊 | AI 解惑

一种新型单相脉冲整流器的MATLAB仿真研究

一种新型单相脉冲整流器的MATLAB仿真研究      摘要:给出了一种新型的脉冲整流器,详细地介绍了其工作原理和控制方案,并对该整流器及其控制系统建立了MATLAB仿真模型,仿真结果验证了该方案的优越性。 关键词:脉冲整流器; ...…

查看全部问答>

wince获取鼠标移动消息?!

我在win7下做wince应用的开发,在模拟器上跑程序。我想获取当前鼠标移动的信息,如果用wm_mousemove的话,会一直触发。不晓得还有什么方法能解决此问题。最好能详细点的答案。谢谢大侠们(最好能加上wince加载mp3的方法)、…

查看全部问答>

求助:怎样实现VB和GPIB的通信?

求助:怎样实现VB和GPIB的通信? 如果有懂得N88BASIC的人请联系我QQ:4270169    …

查看全部问答>

请教一下有关水声通信的调制解调问题

各位大侠,谁有水声通信的资料,能否分享一下,现在做学校的创新项目需要,谢谢…

查看全部问答>

编了两段程序,请求大家帮忙看看问题怎样改善

用ATmega16主控使八个流水灯以一秒闪一次,我不知道怎样编才能使八个流水灯按照顺序接到PD0~PD7引脚上……希望前辈们帮帮我 第一个程序是: #include<iom16v.h>#define uint  unsigned int#define unchar  unsigned charvoid Delay ...…

查看全部问答>

芯片发烫了,是不是烧了??

用手一抹好烫,是不是烧坏了,就搞不清楚,3也能烧坏么??烧坏的芯片发烫还是没烧坏的发烫呀??…

查看全部问答>

【TI技术文章】:选择指南:TI基于ARM®技术的处理器

德州仪器 (TI) 充分认识到低功耗、低成本解决方案的市场需求,并致力于采用各种基于 ARM 技术的解决方案来加强其嵌入式处理产品系列,从而全方位满足当今市场对高性价比和低功耗应用的需求。TI 所生产 ARM 解决方案的数量超过其他任何制造商,始终 ...…

查看全部问答>

大家帮我看下这个STC AD转换 测电压程序错在哪里,谢谢了

#include\"ADC电压表.H\"#include <intrins.h>uchar value;void adc_init(uchar ch){ ADC_CONTR = AD_SPEED;  //选择AD转换 ch&=0x07;        //选择通道 ADC_CONTR =ch; ADC_C ...…

查看全部问答>

【FPGA设计】《FPGA设计高级技巧》全系列讲述 已修改免费

replyreload += \',\' + 1399820;好东西很实用,收藏已久, 拿出跟大家分享下,希望对大家有帮助! 《FPGA设计高级技巧》.pdf Timson,如果您要查看本帖隐藏内容请回复 FPGA设计(设计思想与技巧).pdf Timson,如果您要查看本帖隐藏内容请回 ...…

查看全部问答>

两块板子之间的CAN通讯

      两块5K31的板子,进行CAN通讯,请问时序上应该如何设置?如果一个只负责发送数据,另一个只负责接收数据,又怎么解决? (新板子的移植程序,两块板子分别跟老板子都能够进行CAN通讯,且协议一致了,再将两块一直程序后 ...…

查看全部问答>