二:内核启动

一:流程

sudo vim /etc/network/interfaces
sudo chmod 0666 /etc/default/tft......	//修改可读
uboot命令:
help/?  : 帮助手册,列出uboot支持的所有命令
printenv/print   打印环境变量
setenv   ipaddr  192.168.xx.xx    设置环境变量
setenv   ipaddr    删除环境变量
saveenv   保存环境变量
ping    serverip    检查网络连接(uboot下是单向的,只能从uboot    ping   ubuntu)
内核启动:
设置serverip(ubuntu有限网卡的ip)及ipaddr(开发板)在同一网段
tftp  0x30008000 uImage    通过tftp服务将serverip中的uImage下载到内存的0x30008000地址处
bootm  0x30008000    启动0x30008000地址处的内核

二:内核恐慌

(driver?)
1f04          262144 mtdblock4 (driver?)
Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(2,0)
Backtrace: 

因为没有向内核传参(根文件系统类型/xxxxxx)

三:编译内核

嵌入式系统:软硬件可裁剪的专用计算机系统

1.1Kconfig
Kconfig    定义menuconfig中的配置选项    ---每个目录下都有一个Kconfig文件---make menuconfig中的所有配置选项都在Kconfig中定义make menuconfig /搜索可查到对应搜索文件的路径 ---- 活地图

1:过程

//以下所有操作均在linux内核源码顶层目录进行//		/linux-2.6.32.2
1.拷贝默认配置到 .configcp config_mini2440_td35 .config 	//拷贝到config  .开头是隐藏文件//官方配置都在arch/arm/configs
2.make menuconfig
3.make uImage	//静态编译内核    -j8  意思用8核线程来编译make modules	//编译内核模块make 		   //内核及模块都编译--------------------------------------------ls -a  //显示文件(包括隐藏文件)
sudo vim /home/linux/ARM/linux-2.6.32.2/kernel/timeconst.pl//修改把对应报错的行数注释  #val
make uImage 
---------------------------------------------------
linux@ubuntu:~/ARM/linux-2.6.32.2$ make uImage -j8CHK     include/linux/version.hSYMLINK include/asm -> include/asm-arm
make[1]: 'include/asm-arm/mach-types.h' is up to date.CHK     include/linux/utsrelease.hCALL    scripts/checksyscalls.shCHK     include/linux/compile.hKernel: arch/arm/boot/Image is ready//流程1Kernel: arch/arm/boot/zImage is ready//流程2UIMAGE  arch/arm/boot/uImage//流程3
Image Name:   Linux-2.6.32.2-FriendlyARM
Created:      Mon Aug 25 16:04:46 2025
Image Type:   ARM Linux Kernel Image (uncompressed)
Data Size:    2333148 Bytes = 2278.46 kB = 2.23 MB
Load Address: 30008000
Entry Point:  30008000//两个地址都是一样,但是minicom中,进入的是0x30008040,应该是未定义模式(异常向量表 ,未定义0x40),所以在minicom中进不去,
Image	//可以直接使用的内核映像(镜像)
zImage	//一段解压程序(代码)+Image的压缩包
uImage	//64字节的头信息+zlmage前两个可以直接执行

2:arm编译器

arm-linux-gcc -v	//查看编译器

3.继续过程

重复昨天步骤

tftp 0x30008000 uImage
bootm 0x30008000
//有错误,如下
Starting kernel ...undefined instruction //进入了未定义的模式
pc : [<30008008>]          lr : [<33f01200>] //函数返回地址
sp : 33affdd0  ip : 33affd88     fp : 00000000
r10: 33f356d0  r9 : fff3032c     r8 : 33afff64
r7 : 33f351b8  r6 : 00000000     r5 : 33f356d0  r4 : 30008000
r3 : 33afffdc  r2 : 30000100     r1 : 000007cf  r0 : ea000014
Flags: nzCv  IRQs off  FIQs off  Mode SVC_32
Resetting CPU ...resetting ...
错误解决:
在arch/arm/boot/Makefile 中 64中 
quiet_cmd_uimage = UIMAGE $@cmd_uimage = $(CONFIG_SHELL) $(MKIMAGE) -A arm -O linux -T kernel-C none -a $(LOADADDR) -e 0x30008040 \ -n'LinUX-$(KERNELRELEASE)'-d $< $@C none -a $(LOADADDR) -e 0x30008040 \ 改成未定义mode

4.hello.c(向内核新加文件)

1.在drivers/char目录下创建并编辑hello.c文件2.修改drivers/char下的Makefile新加一样eg:obj-$(CONFIG_HELLO)+=hello.o
3.在同层目录下修改Kconfig,添加一个hello的配置ps:只有Kconfig中定义的配置才会出现在make menucofnig中
4.make menuconfig修改关于hello的配置
5.make uImage

5.整个过程

//1.在drivers/char目录下创建并编辑hello.c文件	1.vi demo.c
static int __init demo_init(void)
{int ret = 0;dev = MKDEV(MAJOR_NUM, MINOR_NUM);cdev_init(&cdev, &fops);ret = cdev_add(&cdev, dev, DEV_NUM);if(ret < 0)goto err_cdev_add;ret = register_chrdev_region(dev, DEV_NUM, DEV_NAME);if(ret < 0)goto err_register_chrdev_region;printk("demo_init  #######################################...\n");
2.2.修改drivers/char下的Makefile新加一样
//vi Makefileeg:obj-$(CONFIG_HELLO)+=hello.oobj-$(CONFIG_DEMO)          += demo.o  
3.在同层目录下修改Kconfig,添加一个hello的配置ps:只有Kconfig中定义的配置才会出现在make menucofnig中
// vi Kconfigconfig DEMObool "this is demo_tets"default y---help---this is a test demo_test driver.
4.make menuconfig修改关于hello的配置CONFIG_DEMO=y			   #关闭
CONFIG_DEMO is not set 		#开启
5.make uImage
Load Address: 30008000
Entry Point:  30008040sudo cp ./arch/arm/boot/uImage /home/linux/tftpboot/在tftpboot中 tftp 0x30008000 uImagebootm 0x30008000
显示效果
在 bootm 0x30008000过程中会显示的效果eg:
Console: switching to colour frame buffer device 30x20
fb0: s3c2410fb frame buffer device
backlight       initialized
demo_init  #######################################...//ok
leds    initialized
buttons initialized
pwm     initialized
adc     initialized
解压压缩包sudo tar -xvf xxxx.tar.gz
从windos复制文件到linuxsudo cp  "paste as filename"	./

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/news/920036.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/920036.shtml
英文地址,请注明出处:http://en.pswp.cn/news/920036.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【YOLOv5部署至RK3588】模型训练→转换RKNN→开发板部署

已在GitHub开源与本博客同步的YOLOv5_RK3588_object_detect项目&#xff0c;地址&#xff1a;https://github.com/A7bert777/YOLOv5_RK3588_object_detect/tree/main 详细使用教程&#xff0c;可参考README.md或参考本博客第六章 模型部署 文章目录一、项目回顾二、模型选择介绍…

Telematics Control Unit(TCU)的系统化梳理

1、Telematics Control Unit (TCU)概述 TCU中文名为远程信息处理控制单元&#xff0c;很多场合都称为Telematics Box&#xff0c;又叫TBox&#xff0c;顾名思义&#xff0c;一般都为一个独立的盒子&#xff08;如图2、图3所示&#xff09;&#xff0c;负责和云端的远程信息交互…

Appium学习笔记

adb构成client端&#xff0c;在电脑上&#xff0c;负责发送adb命令daemon守护进程&#xff0c;在手机上&#xff0c;负责接收和执行adb命令server端&#xff0c;在电脑上&#xff0c;负责管理client和daemon之间的通信![[Pasted image 20250825201322.png]]包名&#xff0c;对应…

栈指针(Stack Pointer)是什么?

栈指针(Stack Pointer)是什么? 首先,用一个简单易懂的方式解释栈指针(Stack Pointer)。 核心比喻:摞起来的书 想象有一摞书整齐地堆在桌面上: 这摞书就是“栈”(Stack),它是一种后进先出(LIFO) 的数据结构。你只能从最顶部拿走一本书(“弹出”),或者把一本新…

数据结构:红黑树(Red-Black Tree)

目录 从AVL树的“烦恼”说起 如何用“颜色”来定义“大致平衡”&#xff1f;—— 红黑树的五个规则 五个规则如何保证“大致平衡”&#xff1f; 用 C/C 代码定义红黑树的结构 定义颜色和节点结构 定义树的结构和哨兵节点 从AVL树的“烦恼”说起 我们从已经了解的 AVL 树出…

Ubuntu22.04安装VMware Tools

文章目录前言安装open-mv-tools前言 本教程使用的版本是Ubuntu22.04.5&#xff0c;由于虚拟机上面的重新安装VMware Tools是灰的&#xff0c;于是自动下载安装open-mv-tools&#xff0c; 安装open-mv-tools 打开终端&#xff0c;更新一下 sudo apt update这一步可能需要先…

DBeaver连接SQL Server时添加驱动后仍提示找不到驱动的解决方法

DBeaver连接SQL Server时添加驱动后仍提示找不到驱动的解决方法 在使用DBeaver连接SQL Server时&#xff0c;即使您已手动添加驱动文件&#xff0c;系统仍提示“找不到驱动”&#xff0c;这通常是由驱动配置错误、版本不兼容或SQL Server设置问题引起的。以下我将逐步为您提供解…

JVM之【类加载系统】

目录 前言 类加载过程 类加载 执行过程 加载阶段 连接阶段 初始化阶段 类加载器 BootstrapClassLoader ExtClassLoader AppClassLoader 类加载器之间的关系 双亲委派机制 核心思想 好处 源码分析 类加载器之间的父子层级关系 双亲委派的体现 前言 上文中提到…

【 限流技术 | 从四大限流算法到Redisson令牌桶实践 】

引言&#xff1a;为什么需要限流&#xff1f;在现代分布式系统中&#xff0c;服务的稳定性是至关重要的。在遇到突发的请求量激增&#xff0c;恶意的用户访问&#xff0c;亦或是请求频率过高给下游服务带来较大压力时&#xff0c;我们常常需要通过缓存、限流、熔断降级、负载均…

深入解析Java NIO多路复用原理与性能优化实践指南

深入解析Java NIO多路复用原理与性能优化实践指南 技术背景与应用场景 在高并发网络编程中&#xff0c;传统的阻塞 I/O 模型往往因每个连接都占用一个线程或一个系统调用而导致线程资源浪费、线程切换开销剧增等问题&#xff0c;难以满足数万甚至数十万并发连接的负载要求。Jav…

目标检测数据集 第006期-基于yolo标注格式的汽车事故检测数据集(含免费分享)

目录 目标检测数据集 第006期-基于yolo标注格式的汽车事故检测数据集(含免费分享) 超实用汽车事故检测数据集分享&#xff0c;助力计算机视觉研究&#xff01; 1、背景 2、数据详情 数据集基本信息 结构组成 标注格式与示例 类标签说明 数据增强情况 3、应用场景 4、…

应用密码学(书籍学习笔记、基础知识) 一

本博客为读《应用密码学》所得笔记 文章目录一、 加密与解密1.2 秘钥Key1.2.1 引入秘钥K1.2.2 加密秘钥K1&#xff0c;解密秘钥K2二、对称算法 VS 公开密钥算法**① 对称算法** - 传统密码算法 **(Symmetric Algorithm) &#x1f511;****② 非对称算法特点** - 公开秘钥算法 *…

【攻防世界】Web_php_include

1.信息收集题目&#xff1a;Web_php_include &#xff1a;PHP文件包含漏洞2.思路&#xff1a;1.代码审计&#xff1a;<?php show_source(__FILE__); echo $_GET[hello]; $page$_GET[page]; while (strstr($page, "php://")) { //在一个字符串中查…

cmake--CPack/deb

deb包的需求 怎么使用cmake把项目的依赖想打包为deb包,把项目的可执行文件和依赖文件打包为deb包,又怎么样配置apt源,让项目在jenkins构建之后,可以通过sudo apt install 下载deb包和安装到任意主机上? 整体流程概览 使用CMake构建项目:确保你的项目可以被CMake正确编译…

七十五、【Linux数据库】部署Redis服务 、 部署LNMP+Redis

Redis 与 LNMP 集成功能概述 Redis 核心功能 内存数据存储:高速读写性能 数据结构丰富:字符串、哈希、列表、集合等 持久化支持:RDB快照和AOF日志 发布订阅:消息队列功能 高可用:主从复制、哨兵模式、集群 LNMP+Redis 集成价值 会话共享:多Web服务器共享Session 数据缓存…

从YOLOv5到RKNN:零冲突转换YOLOv5模型至RK3588 NPU全指南

从YOLOv5到RKNN&#xff1a;零冲突转换YOLOv5模型至RK3588 NPU全指南 在嵌入式AI领域&#xff0c;将训练好的深度学习模型高效部署到边缘设备的NPU&#xff08;神经网络处理器&#xff09;上是提升性能的关键。本文将详细介绍如何在Ubuntu 20.04环境下&#xff0c;将YOLOv5l模型…

DNS的解析过程是怎样的?它基于传输层的什么协议?

问题DNS的解析过程是怎样的&#xff1f;它基于传输层的什么协议&#xff1f;我的回答&#xff1a;DNS解析过程是将域名转换为IP地址的一系列步骤。这个过程涉及多级缓存和查询&#xff1a;首先是浏览器缓存&#xff0c;浏览器会先检查自己的DNS缓存是否有记录。接着是操作系统缓…

模拟互联网大厂Java面试:电商场景下的技术探讨

模拟互联网大厂Java面试&#xff1a;电商场景下的技术探讨 场景概述 在这场模拟面试中&#xff0c;我们设定了一位互联网大厂的面试官与候选人小C之间的对话。面试官严肃专业&#xff0c;而小C则是搞笑的“水货程序员”。通过三轮问答&#xff0c;我们探索了Java技术栈在电商场…

遥感机器学习入门实战教程|Sklearn案例⑤:集成学习方法全览

在机器学习的实际应用中&#xff0c;单一分类器往往存在局限&#xff1a;比如决策树容易过拟合&#xff0c;kNN 对噪声敏感&#xff0c;逻辑回归在高维数据下收敛慢。为了提升整体效果&#xff0c;我们通常会采用 集成学习&#xff08;Ensemble Learning&#xff09;。 这篇文章…

大模型在垂直场景中的创新应用:搜索、推荐、营销与客服的新玩法

1. 引言 背景介绍:简述大模型(如GPT、BERT等)的发展历程及其在AI领域的核心作用,强调其在垂直场景中的潜力。 主题聚焦:说明本文将深入探讨搜索、推荐、营销、客服四大场景,分析大模型带来的创新开发方式。 目的与意义:阐述新玩法如何提升效率、增强用户体验,并推动行业…