【嵌入式开发】向开发板中烧写Linux系统-型号S3C6410

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

板子型号 : 三星 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]
关键字:嵌入式开发  开发板  S3C6410 引用地址:【嵌入式开发】向开发板中烧写Linux系统-型号S3C6410

上一篇:面向对象之编写驱动程序--中断(linux系统、s3c6410开发板)
下一篇:搭建 S3C6410开发板的测试环境

推荐阅读最新更新时间:2024-11-14 18:20

OK6410A 开发板 (八) 7 linux-5.11 OK6410A usb camera移植
代码 : https://github.com/lisider/linux/tree/ok6410a-linux-5.11 提交id : 0cf53aa024fbd417f0796a77ff7f9b891680dac8 defconfig : arch/arm/configs/ok6410A_sdboot_mini_net_lcd_x11_usb_debug_uvc_defconfig 用户空间代码 uvc_cam_test Makefile CROSS_COMPILE =arm-none-linux-gnueabi- KERNELDIR = CFLAGS = -I$(KERNELDIR)/include -O -Wa
[单片机]
S3C2440开发板上BMP图片的显示之三
三、BMP图片显示功能扩展 1、图片显示的功能扩展 (1)能够调整图片的显示区域,比如我准备了一张 480x384的图片,液晶屏大小只有它的九分之一,要通过键盘控制,“看到整张图片”。 (2)能够显示单色、16色、256色、24位真彩色图片。 (3)能够对图片进行缩小显示,比如前面那个480x384的图片,能够缩小比例显示在液晶屏上。这个实现应该不难,但是放大就比较麻烦了,要用到数学上的插值,这个稍微做一下尝试。 2、图片的移动 (1)分析 首先一个要明确的概念,我们所谓“移动图片”,实质不是在移动图片,而是在移动观测图片的 “显示窗口”。 比如一张比显示屏大的图片,现在只显示了上半部分,我们要看它的下半部分,可以按下方向键“
[单片机]
OK6410A 开发板 (八) 48 linux-5.11 OK6410A linux内存管理总览
linux内存管理 总览 进程 与 内存管理 linux 内存 从 内存类型角度分为 A. 虚拟内存 B. 物理内存 linux 内存 从 管理角度分为 A. 用户内存 B. 内核内存 从而 正交 形成了 4种 1. 内核物理内存 由 struct page 管理, 不同的 内存模型 有不同的管理方式 // CONFIG_FLATMEM CONFIG_DISCONTIGMEM CONFIG_SPARSEMEM_VMEMMAP CONFIG_SPARSEMEM 2. 内核虚拟内存 由 四种方式() 管理 // 直接(线性)映射 vmalloc动态映射 持久映射kmap 固定映射f
[单片机]
基于S3C6410的ARM11学习(六) 核心初始化之关闭所有中断
上一次,我们完成了核心初始化之关闭看门狗了。下面就要关闭所有中断了。因为这个时候还在初始化整个硬件环境,应用程序还没有开始跑,所以是不希望有中断产生来打断CPU工作的。 中断是嵌入式系统中很重要的东西了。因为有了这个东西,可以使CPU解放出来,做更多的事。 学单片机的时候,对于按键,我们可以采用轮询检测,隔一段时间就去检测看看按键有没有按下,有按下的话就进行处理。没有的话就跳过。而使用外部中断后,就不必检测了,外部中断会自动检测,就不用CPU检测了。当外部中断有效后,外部中断模块就会产生一个中断源给CPU,CPU检测到这个中断源,再去执行对应的中断处理函数。比轮询法效率要高很多了。 至于S3C6410的中断的具体的一些
[单片机]
基于<font color='red'>S3C6410</font>的ARM11学习(六) 核心初始化之关闭所有中断
意法半导体推出新款STM8 Nucleo开发板
意法半导体新推出的两款 STM8* Nucleo 开发板,让8位开发社区也能体验到STM32 * Nucleo系列开发板久经验证的易用性和可扩展功能。 STM8 Nucleo开发板沿用创建了无数个STM32嵌入式项目的成功方法,板载ST morpho排针让开发者能够充分利用STM8 MCU 的全部I / O引脚,而Arduino™Uno连接器让开发者能够利用开源Arduino兼容Shield生态系统的巨大资源,简化功能扩展。 这两款STM8 Nucleo开发板的主要配套开发工具链包括Cosmic IDEA工具链、IAR™EWSTM8集成开发环境和意法半导体免费的STVD IDE。支持拖放式闪存烧写操作等便捷功能可加快
[电源管理]
意法半导体推出新款STM8 Nucleo<font color='red'>开发板</font>
OK6410A 开发板 (九) 4 buildroot-2021.02 OK6410A rootfs 中的动态链接库
rootfs中动态链接库的来源 来自于 交叉编译链 rootfs 中 libc.so.6 来源猜想 suws@ubuntu:~/ok6410/system-new/buildroot/output$ sudo find . -name libc.so.6 | xargs ls -l lrwxrwxrwx 1 suws suws 12 May 30 2014 ./host/arm-buildroot-linux-gnueabi/sysroot/lib/libc.so.6 - libc-2.18.so lrwxrwxrwx 1 root root 12 Apr 15 15:21 ./images/rootfs/lib/libc.
[单片机]
OK6410A <font color='red'>开发板</font> (九) 4 buildroot-2021.02 OK6410A rootfs 中的动态链接库
OK6410A 开发板 (八) 120 linux-5.11 OK6410A cache 配置
armv6 linux 有 5种缓存策略,分别对应三大类 // 三大类 通过 cp15 中的C1寄存器的两个bit 来决定 // P740 的 bit (C) 和 bit (W) W C 1. uncached 0 0 3. buffered 1 0 4. writethrough writeback writealloc 0 1 3 中的三种 可通过 内存页表中字段(P727)的 TEX+C+B 来 决定,参考 ARMv6 的 RF P711 可用 early_param( cachepolicy , early_cachepolicy); 来设置 cach
[单片机]
如何选择STM32MP1系列核心板和开发板
一款合适的处理器,是每个工程师在开发设计前期调研必须面对的难题。而如何挑选一款符合产品开发的处理器呢?今天我们就以ST公司的STM32MP1系列处理器进行分析比较。 ST公司目前已经发布了两款不同类型的MPU芯片,分别是STM32MP15系列和STM32MP13系列。这两款芯片的特点十分鲜明:STM32MP15采用的是ARM A7 + M4异构CPU,可以实现双系统,支持Linux和RTOS操作系统,并且拥有3D GPU和MIPI显示接口;STM32MP13系列对比STM32MP15系列进行了精简化处理,但功能应用得到提升,处理器主频提高到1GHz,自带的双千兆以太网,双CAN FD功能十分适合应用在工业物联网和汽车通信领域。
[单片机]
如何选择STM32MP1系列核心板和<font color='red'>开发板</font>
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
  • ARM裸机篇--按键中断
    先看看GPOI的输入实验:按键电路图:GPF1管教的功能:EINT1要使用GPF1作为EINT1的功能时,只要将GPFCON的3:2位配置成10就可以了!GPF1先配 ...
  • 网上下的--ARM入门笔记
    简单的介绍打今天起菜鸟的ARM笔记算是开张了,也算给我的这些笔记找个存的地方。为什么要发布出来?也许是大家感兴趣的,其实这些笔记之所 ...
  • 学习ARM开发(23)
    三个任务准备与运行结果下来看看创建任务和任运的栈空间怎么样的,以及运行输出。Made in china by UCSDN(caijunsheng)Lichee 1 0 0 ...
  • 学习ARM开发(22)
    关闭中断与打开中断中断是一种高效的对话机制,但有时并不想程序运行的过程中中断运行,比如正在打印东西,但程序突然中断了,又让另外一个 ...
  • 学习ARM开发(21)
    先要声明任务指针,因为后面需要使用。 任务指针 volatile TASK_TCB* volatile g_pCurrentTask = NULL;volatile TASK_TCB* vol ...
  • 学习ARM开发(20)
  • 学习ARM开发(19)
  • 学习ARM开发(14)
  • 学习ARM开发(15)
何立民专栏 单片机及嵌入式宝典

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

更多开源项目推荐

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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