【嵌入式开发】写入开发板Linux系统-模型S3C6410

发布者:fengting最新更新时间:2024-09-18 来源: cnblogs关键字:嵌入式开发  开发板  Linux系统 手机看文章 扫描二维码
随时随地手机看文章

板子型号 : 三星 S3C6410 基于ARM11, 指令集基于arm6指令集;

为毛不是 Cortext A9的板子;

烧写内容 : BootLoader, Linux Kernel, File System;


烧写流程 : 


-- sd卡烧写u-boot并启动 : 首先将 u-boot 烧写到 sd 卡中, 使用 sd 卡的bootloader启动; 


-- 擦出nand flash : 之后将开发板的闪存 nand flassh 擦除干净; 


-- nand flash 烧写 u-boot : 然后将 u-boot 烧写到 nand flash 中;


-- 烧写内核 : 向nand flash 中烧写内核;


-- 烧写文件系统 : 将文件系统烧写到nand flash 中; 


1. BootLoader介绍


嵌入式开发板软件层次 : 从底层到上层 引导程序 -> Linux内核 -> 文件系统 -> 应用程序


-- 引导载入程序 : 分为两部分 硬件中的固化boot代码 和 BootLoader代码, 当中固化的boot代码可有可无, BootLoader是烧写上去的;


-- Linux内核 : 嵌入式开发板定制的内核 和 其启动參数;


-- 文件系统 : 即Linux中的文件系统;


-- 应用程序 : 即用户运行的应用程序, 应用程序 和 内核之间可能包括嵌入式的图形界面;


引导载入程序介绍 : 引导载入程序是系统上电之后运行的第一段程序;


PC机上的引导载入程序 : 


-- 组成结构 : BIOS (固件程序) 和 BootLoader(GRUB等程序);


-- 运行过程 : BIOS运行硬件检測 和 资源分配, 之后将BootLoader读取到内存中, 開始运行BootLoader内容;


-- 运行作用 : 将内核读取到内存中, 跳转到内核的入口运行, 正式运行操作系统程序;


嵌入式BootLoader : BootLoader与硬件的依赖性非常强, 每一种嵌入式设备都有其相应的BootLoader引导程序, 在这里 S3C6410 板子使用的BootLoader 是 U-BOOT;


BootLoader操作模式 : 将BootLoader烧写到 nand flash 中之后, 第一次启动是靠交互模式启动的, 之后就靠子启动模式启动;


-- 自启动模式 : 系统上电之后自己主动将 BootLoader 载入到内存, 之后自己主动开启系统, 整个过程全自己主动, 用户不介入;


-- 交互模式 : BootLoader 通过串口 或者 网络从服务器上下载内核到内存中, 能够将内核写到磁盘, 或者直接进入系统, 同一时候能够从串口中接收用户命令;


BootLoader启动过程 : 分为两个阶段;


-- 第一阶段 : 初始化基本硬件, 将BootLoader载入到内存中, 设置堆栈指针, 清空BSS段;


-- 第二阶段 : 初始化本阶段用的硬件, 读取环境变量, 启动BootLoader(两种启动模式);


2. 配置网络

烧写过程须要配置 网络, tftp, nfs 三项, 配置完之后重新启动服务器;


(1) 网络设置


须要设置网络ip地址 和 关闭防火墙; 假设是 redhat 系统, 还须要关闭SELinux;


设置ip地址命令 : ifcofig eth0 192.168.1.27 命令;


关闭防火墙 : sudo ufw disable 命令;


重新启动网络服务 :  sudo /etc/init.d/networking restart 命令;


octopus@octopus:~$ sudo ifconfig eth0 192.168.1.27

octopus@octopus:~$ sudo ufw disable

防火墙在系统启动时自己主动禁用

octopus@octopus:~$ sudo /etc/init.d/networking restart

 * Running /etc/init.d/networking restart is deprecated because it may not enable again some interfaces

 * Reconfiguring network interfaces... 


(2) 配置tftp


安装tftp软件 : 


-- 安装tftp服务器 : sudo apt-get install tftpd 命令;


-- 安装tftp客户端 : sudo apt-get install tftp 命令;


-- 安装 xinetd : sudo apt-get install xinetd 命令;


配置 tftp : 建立 /etc/xinetd.d/tftp 文件, 使用 sudo vim /etc/xinetd.d/tftp 命令, 向文件里写入以下内容 : 


service tftp

{

socket_type = dgram

wait = yes

disable = no

user = root

protocol = udp

server = /usr/sbin/in.tftpd

server_args = -s /tftpboot

#log_on_success += PID HOST DURATION

#log_on_failure += HOST

per_source = 11

cps =100 2

flags =IPv4

}


,

创建共享文件夹 : 查看 根文件夹下 有没有 tftpboot 文件夹, 假设没有的话就创建 /tftpboot 文件夹;


-- 创建共享文件夹 : sudo mkdir /tftpboot 命令创建;


-- 改动权限 : sudo chmod -R 777 /tftpboot , 加上 -R 表示 递归将其子文件夹子文件也进行权限改动; 


改动 /etc/xinetd.d 配置文件 : 保证配置文件与以下一致就可以;


# Simple configuration file for xinetd

#

# Some defaults, and include /etc/xinetd.d/


defaults

{


# Please note that you need a log_type line to be able to use log_on_success

# and log_on_failure. The default is the following :

# log_type = SYSLOG daemon info


}


includedir /etc/xinetd.d


改动 /etc/default/tftpd-hpa 配置文件 : 


# /etc/default/tftpd-hpa


TFTP_USERNAME='tftp'

TFTP_DIRECTORY='/tftpboot'

TFTP_ADDRESS='0.0.0.0:69'

TFTP_OPTIONS='-l -c -s'


重新启动tftp服务 : 注意依照次序将以下三个命令依次运行 ;

-- 运行 service tftpd-hpa restart 命令 : 



octopus@octopus:~$ service tftpd-hpa restart

stop: Rejected send message, 1 matched rules; type='method_call', sender=':1.83' (uid=1000 pid=5737 comm='stop tftpd-hpa ') interface='com.ubuntu.Upstart0_6.Job' member='Stop' error name='(unset)' requested_reply='0' destination='com.ubuntu.Upstart' (uid=0 pid=1 comm='/sbin/init')

start: Rejected send message, 1 matched rules; type='method_call', sender=':1.84' (uid=1000 pid=5734 comm='start tftpd-hpa ') interface='com.ubuntu.Upstart0_6.Job' member='Start' error name='(unset)' requested_reply='0' destination='com.ubuntu.Upstart' (uid=0 pid=1 comm='/sbin/init')

-- 运行 sudo /etc/init.d/xinetd reload 命令 : 


octopus@octopus:~$ sudo /etc/init.d/xinetd reload

[sudo] password for octopus: 

Rather than invoking init scripts through /etc/init.d, use the service(8)

utility, e.g. service xinetd reload


Since the script you are attempting to invoke has been converted to an

Upstart job, you may also use the reload(8) utility, e.g. reload xinetd

-- 运行 sudo /etc/init.d/xinetd restart 命令 : 


octopus@octopus:~$ sudo /etc/init.d/xinetd restart

Rather than invoking init scripts through /etc/init.d, use the service(8)

utility, e.g. service xinetd restart


Since the script you are attempting to invoke has been converted to an

Upstart job, you may also use the stop(8) and then start(8) utilities,

e.g. stop xinetd ; start xinetd. The restart(8) utility is also available.

xinetd stop/waiting

xinetd start/running, process 5769


測试 tftp 服务 : 

-- 进入tftp : 使用 tftp localhost , 进入本地的tftp服务器;


-- 下载当中的文件 : 使用 get uboot.bin 下载当中的 uboot 文件到本地文件夹, 假设文件不存在会提示 Error code 1: File not found 错误;



octopus@octopus:~$ tftp localhost

tftp> get aaa

Error code 1: File not found

tftp> get uboot.bin

tftp> quit

octopus@octopus:~$ ls

aaa        develop  icmp         ndk       Source Insight  x86-probe  模板  图片  下载  桌面

arm-probe  gcc      log4c-1.2.1  programs  uboot.bin       公共的     视频  文档  音乐




(3) 配置 nfs 服务



安装nfs服务器 : sudo apt-get install nfs-kernel-server 命令;




配置 nfs 服务 : 使用 sudo vim /etc/exports 命令配置, 将以下的内容加入到文件末尾 ;



/nfsroot *(rw,sync,no_root_squash)

-- 最终配置 : 



# /etc/exports: the access control list for filesystems which may be exported

# to NFS clients.  See exports(5).

#

# Example for NFSv2 and NFSv3:

# /srv/homes       hostname1(rw,sync,no_subtree_check) hostname2(ro,sync,no_subtree_check)

#

# Example for NFSv4:

# /srv/nfs4        gss/krb5i(rw,sync,fsid=0,crossmnt,no_subtree_check)

# /srv/nfs4/homes  gss/krb5i(rw,sync,no_subtree_check)


/nfsroot *(rw,sync,no_root_squash)


-- /nfsroot : 这个是 nfs 服务的共享文件夹;

-- * : 表示随意IP都能够訪问;


-- rw : 表示 能够 读 写;


-- sync : 表示 同步;


-- no_root_squash : 表示 root 用户登录不做权限检查;




创建共享文件夹 : sudo mkdir /nfsroot ;




重新启动端口映射 : sudo /etc/init.d/portmap restart ;



octopus@octopus:~$ sudo /etc/init.d/portmap restart

Rather than invoking init scripts through /etc/init.d, use the service(8)

utility, e.g. service portmap restart


Since the script you are attempting to invoke has been converted to an

Upstart job, you may also use the stop(8) and then start(8) utilities,

e.g. stop portmap ; start portmap. The restart(8) utility is also available.

portmap stop/waiting

portmap start/running, process 5234


重新启动 nfs 服务 : sudo /etc/init.d/nfs-kernel-server restart ;


octopus@octopus:~$ sudo /etc/init.d/nfs-kernel-server restart

 * Stopping NFS kernel daemon                                                                                             [ OK ] 

 * Unexporting directories for NFS kernel daemon...                                                                       [ OK ] 

 * Exporting directories for NFS kernel daemon...                                                                                exportfs: /etc/exports [2]: Neither 'subtree_check' or 'no_subtree_check' specified for export '*:/nfsroot'.

  Assuming default behaviour ('no_subtree_check').

  NOTE: this default has changed since nfs-utils version 1.0.x


                                                                                                                          [ OK ]

 * Starting NFS kernel daemon                                                                                             [ OK ] 


验证nfs服务 : showmount -e, 假设出现共享文件夹说明 nfs 服务配置成功;


octopus@octopus:~$ showmount -e

Export list for octopus:

/nfsroot *



3. 向 SD 卡中烧写 u-boot



烧写位置 : 烧写的 u-boot 位于 sd卡的末端, 假设SD卡存满了数据, 就会将最后的数据破坏掉, 烧写的 u-boot 在文件系统中是看不到的;



计算位置 : 依据SD卡类型计算出 烧写 u-boot 的初始位置;

-- SD卡 : SD 卡 最后2个文件块 不能用于烧写 u-boot, 因此烧写的位置是 SD卡块大小 减去 2 再减去 u-boot 的块大小, 注意是 块 大小, 一块是 512字节;

-- SDHC卡 : SDHC 卡 最后 1026 字节不能用于烧写 u-boot, 因此烧写的位置是 SDHC卡 块大小 减去 1026, 再减去 u-boot 块大小;



将SD卡装入读卡器, 查看设备名称 : 使用 sudo fdisk -l /dev/sd* 查看sd卡大小, 推断sd卡;

-- 查找sd卡 : 使用 ls /dev/sd* 命令查找sd卡;



octopus@octopus:~$ ls /dev/sd*

/dev/sda  /dev/sda1  /dev/sda2  /dev/sda5  /dev/sdb  /dev/sdb1

-- 查看SD卡信息 : 使用 sudo fdisk -l /dev/sdb 命令, 能够看到 SD卡的块大小是 512字节, 总字节数为 1018691584 , 总块数为 1989632 块;


octopus@octopus:~$ sudo fdisk -l /dev/sdb


Disk /dev/sdb: 1018 MB, 1018691584 bytes

30 heads, 29 sectors/track, 2286 cylinders, total 1989632 sectors

Units = 扇区 of 1 * 512 = 512 bytes

Sector size (logical/physical): 512 bytes / 512 bytes

I/O size (minimum/optimal): 512 bytes / 512 bytes

Disk identifier: 0x00000000


   设备 启动      起点          终点     块数   Id  系统

/dev/sdb1 

-- 查看 SD 卡块大小 : 使用 cat /sys/block/sdb/size 命令;


octopus@octopus:~$ cat /sys/block/sdb/size 

1989632



计算 u-boot 大小 : 使用 ll u-boot-movi.bin 命令查看, 大小未 270336, 处以 512, 总共是 528块;


octopus@octopus:~$ ll u-boot-movi.bin 

-rw-r--r-- 1 octopus octopus 270336  4月 20 16:59 u-boot-movi.bin

[1] [2] [3]
关键字:嵌入式开发  开发板  Linux系统 引用地址:【嵌入式开发】写入开发板Linux系统-模型S3C6410

上一篇:ARM中外部中断
下一篇:S3C6410的PWM驱动实例

推荐阅读最新更新时间:2024-11-08 11:27

基于USB接口的微型桌面Linux系统设计方案
  1 引言   随着USB 3.0 标准的发布,存储容量为8GB 至128GB 的USB 接口移动存储设备成为主流。由于USB盘体积小、携带方便、同时具有热插拔功能,给移动数据存储带来了便利。而开源的Linux 操作系统具有的高可靠性和安全性、广泛的硬件支持、灵活实用的可定制性等特点,使得Linux 桌面系统在办公应用方面也逐步受到人们的青睐。如果在USB 接口的移动存储设备上实现一个Linux 微型桌面系统,将是一个不错选择。然而,将标准的Linux 发行版系统安装在USB盘上,将占用近2G 的存储空间,其中有许多软件我们移动办公并不需要。同时,人们从数据安全性角度的考虑,希望在不使用原有宿主机操作系统和数据的前提下进行便
[嵌入式]
U-Boot在基于ADSP BF533的嵌入式Linux系统上的移植
1 引言 Boot Loader(内核引导程序)是在操作系统内核运行之前运行的一段自举程序,用于初始化硬件设备、改变处理器运行模式、重组中断向量和建立内存空间映射图,从而将系统的软硬件带到一个合适的状态或者用户定制的特定状态,以便为最终加载操作系统内核准备好正确的环境 。 嵌入式Linux系统常用的Boot Loader有arm-boot、redboot、U-Boot等。U-Boot (全称Universal Boot Loader)是当前比较流行的遵循GPL条件的开放源码项目。U-Boot具有源码公开的特点,开发人员可根据自身需要进行裁减;支持多种处理器和嵌入式操作系统内核;具有多种设备驱动源码:支持种引导方式;具有功能强大
[应用]
在MIPS开发板上建立Linux系统及开发环境
作者Email: jie_yi@sohu.com 介绍了利用已有的MIPS版Linux源文件包,编译可运行的Linux内核的方式;讨论了在主机上建立相关服务器,通过NFS服务从主机上下载内核,在无盘开发板上启动Linux的方法。 关键词:MIPS NFS 启动Linux 一、引言 大多数基于MIPS处理器的平台上都没有提供软、硬盘接口,一般情况下,也没有在板载Flash里烧入可使用的操作系统。没有操作系统,用户的使用就会受到很多限制,应用程序的开发、调试过程就会变得相当复杂。因此,建立合适的操作系统及开发环境,可以方便用户,简化开发调试过程。本文以RedHat Linux 为例,说明在RM7000A处理器无盘
[应用]
TQ2440开发板学习纪实(3)--- 设置时钟频率,让CPU运行的更快
0 原理 0.1 时钟源自哪里 所谓的时钟,就是电压高低的变化,只有不断的0,1交替变化,CPU才能被驱动运行。S3C2440支持多种时钟源,这通过CPU针脚OM3和OM3来选择。对于QT2440板子来说,OM3和OM2均直接接地,这就意味着时钟源来自针脚XTIpll和XTOpll,这两个针脚在TQ2440的核心板上被连接上了一个12MHz的晶振。 0.2 S3C2440的时钟原理与设置 CPU、RAM、UART等不同的设备运行时需要不同的时钟频率,这些不同的频率需要通过变频电路来提供,在电子行业这个变频电路叫做PLL(Phase Locked Loop)。作为软件出身的程序员,不太可能精通电路设计,只需要知道这个PLL可以把
[单片机]
微芯推出全新嵌入式Wi-Fi®开发板集成TCP/IP协议栈
Microchip Technology Inc.(美国微芯科技公司)宣布在Microchip灵活的模块化Explorer开发系统中集成入近期收购的Roving Networks公司的Wi-Fi®模块,以支持全部Microchip的8位、16位和32位PIC®单片机。RN-131和RN-171 PICtail™/PICtail Plus子板是首批由Microchip开发的两款基于Roving Networks模块的产品。这些模块采用一个简单的串行接口,可连接任何PIC单片机;同时因在经认证的Wi-Fi解决方案中集成TCP/IP协议栈且实现业界最低功耗,扩展了Microchip无线产品组合。 Microchip的Roving
[单片机]
微芯推出全新嵌入式Wi-Fi®<font color='red'>开发板</font>集成TCP/IP协议栈
OK6410A 开发板 (八) 110 linux-5.11 OK6410A 从流程去熟悉文件系统1-挂载
挂载的时机有两种 1. 注册文件系统之后就挂载 2. 在用户空间挂载 2.1 fstab中挂载 2.2 用户手动用mount 命令挂载 挂载流程变迁史 在内核空间的挂载直接用 kern_mount挂载 在用户空间的挂载 用 用户空间的 mount 函数 , mount 往下调用,陷入内核 ,SYSCALL_DEFINE5(mount 这些接口都没变,变的是 内部实现 老的文件系统中 仍然用 mount 成员 去 创建 super_block 成员 当前(5.11)内核中file_system_type 结构体 中的 mount 成员 即将被抛弃 但是目前依靠 新挂载流程 中 的 legacy_init_
[单片机]
在MIPS开发板上建立Linux系统及开发环境
作者Email: jie_yi@sohu.com 介绍了利用已有的MIPS版Linux源文件包,编译可运行的Linux内核的方式;讨论了在主机上建立相关服务器,通过NFS服务从主机上下载内核,在无盘开发板上启动Linux的方法。 关键词:MIPS NFS 启动Linux 一、引言 大多数基于MIPS处理器的平台上都没有提供软、硬盘接口,一般情况下,也没有在板载Flash里烧入可使用的操作系统。没有操作系统,用户的使用就会受到很多限制,应用程序的开发、调试过程就会变得相当复杂。因此,建立合适的操作系统及开发环境,可以方便用户,简化开发调试过程。本文以RedHat Linux 为例,说明在RM7000A处理器无盘
[嵌入式]
嵌入式Linux系统的图像采集与显示
1 系统平台的硬件结构 本文使用的系统平台硬件功能框图如图1所示,该平台采用Samsung公司的处理器S3C2410。该处理器内部集成了ARM公司 ARM920T处理器核的32位微控制器,资源丰富,带独立的16KB的指令Cache和16KB数据Cache,LCD控制器、RAM控制器,NAND 闪存控制器,3路UART、4路DMA、4路带PWM的Timer、并行I/O口、8路10位ADC、Touch Screen接口,I2C接口,I2S接口、2个USB接口控制器、2路SPI,主频最高可达203MHz。在处理器丰富资源的基础上,还进行了相关的配置和扩展,平台配置了16MB 16位的FLASH和64MB 32位的SDRAM,通过以太网
[单片机]
嵌入式<font color='red'>Linux系统</font>的图像采集与显示
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved