6818Linux内核开发移植

基于GEC6818开发板(s5p6818)移植64位linux系统-总体概述 弃用旧的粤嵌开发板的内核和根文件系统,移植使用友善之臂friendlyelec Smart6818等开发板上使用的64位系统(内核版本为4.4,ubuntu根文件系统),使用新的资料才能让板子恢复学习的意义。主要工作为LCD、网卡等外设驱动的移植,以及应用层64位嵌入式Qt的移植(并使用OpenGL显卡进行硬件加速) 阅读详情

Linux内核开发移植

Linux内核版本变迁及其获得

Linux是最受欢迎的自由电脑操作系统内核, 是一个用C语言写成, 并且符合POSIX标准的类Unix操作系统

Linux是由芬兰黑客Linus Torvalds开发的, 目的是尝试在英特尔x86架构上提供自由免费的类Unix操作系统

Linux操作系统的诞生、 发展、 和成长过程依赖于五个重要支柱: unix操作系统、 minix操作系统、 GNU计划、 POSIX标准和互联网

内核版本号从Linux1.0以后主要分为两个阶段:

Linux1.0-2.6, 数字包括四部分“ A.B.C.D”

  • A代表主版本号, 如1994年的1.0, 1996年的2.0, 2011年的3.0
  • B代表次版本号, 表示一些重大的修改, 偶数表示稳定版, 奇数表示开发版
  • C代表末版本号, 代表着一个新版本的发布(包括安全补丁、 bug修复、 新增功能、 或驱动程序), 一般数字变化范围比较大
  • D代表一些BUG修复, 对已经加入的安全补丁、 bug修复、 新增功能或驱动程序做的微调或添加新的特性, 2.6版本之后经常出现

Linux2.6之后的版本, 数字主要包括三部分"A.B.C"或"A.B.C-rcn"

  • A代表主版本号
  • B代表次版本号, 随着一个新版本的发布而增加, 与上一阶段中的数字” C“功能类似, 但不再代表稳定与否
  • C代表稳定版本号, 如果只有数字则代表稳定版本, 如果带"-rcn"表示最终稳定版本之前的候选版本(Release Candidate), n代表候选版本号

各版本之间的关系及命名规则可以参考网站:https://zh.wikipedia.org/wiki/Linux%E5%86%85%E6%A0%B8

注意: page9中的EOL: end of life: 指从此往后不在对应的版本上进行更新。 下面展示了Linux内核的版本变迁过程:

image-20200701153655101

Linux内核结构

Linux内核是Linux系统软件的核心, 它的性能对整个系统的性能起决定作用

Linux内核文件数目将近4万个, 他们分别位于顶层目录下的20个子目录中, 了解Linux内核的工作过程,必须从了解其目录结构做起

我们后面研究并移植的内核为:3.4.39, 首先我们从官网上下载3.4.39的内核源码linux-3.4.39.tar.bz2将其在虚拟机上解压, 使用tree命令可以在虚拟机下查看其目录结构

Linux内核源代码主要包含以下子目录:

image-20200701155535511

  • arch 与体系结构相关的代码。 对应于每个支持的体系结构, 有一个相应的子目录如x86、 arm等与之对应, 相应目录下有对应的芯片与之对应
  • crypto 常用加密及散列算法, 和一些压缩及CRC校验算法
  • Documentation 内核相关文档, 关于内核各部分的通用解释和注释
  • drivers 设备驱动代码, 占整个内核代码量的一半以上, 里面的每个子目录对应一类驱动程序, 如: block:块设备、 char:字符设备、 net:网络设备等
  • fs 文件系统代码, 每个支持的文件系统有相应的子目录, 如cramfs,yaffs, jffs2等
  • include 这里包括编译内核所需的大部分头文件 , 与平台无关的头文件放在include/linux子目录下 , 各类驱动或功能部件的头文件( /media、 /mtd、 /net等), 与体系相关的头文件 arch/arm/include/ , 与平台相关的头文件路径arch/arm/mach-s5p6818/include/mach
  • init 内核初始化代码,其中的main.c中的start_kernel函数是系统引导起来后运行的第1个函数, 这是研究内核工作过程的起点
  • ipc 内核进程间通信代码
  • kernel 内核管理的核心代码, 此目录下的文件实现了大多数linux系统的内核函数, 体系结构相关的代码在arch/arm/kernel
  • lib 与体系结构无关的内核库代码,与系统调用相关 , 与体系结构相关的内核库代码在arch/arm/lib下
  • mm 与体系结构无关的内存管理代码 , 与处理器体系结构相关的代码在 arch/arm/mm下
  • net 网络部分代码, 其每个目录对应于网络的一个方面
  • scripts 存放一些脚本文件, 如配置内核时用到的make menuconfig命令等

Linux kernel组成:

img

image-20200701160147862

Linux内核部分模块:

进程管理、 进程调度、 系统调用、 中断处理、 下半部和工作队列、 内核同步、 定时管理、 内存管理、虚拟文件系统、 块设备、 网络子系统、 进程地址空间、 模块机制等等…

Linux编程风格 :

像所有其他大型软件项目一样, Linux制定了一套编码风格

跟选择一个唯一确定的风格相比, 到底选择什么样的风格反而显得不是那么重要

编码风格的主要规范伴随着Linus一贯的幽默,都记录在内核源码的Documentation/Coding Style中了。

制定编码风格的目的, 是为了提高编程效率, 吸引更多的开发者眼球

缩进

  • 采用制表符(Tab)进行缩进, 而不是空格
  • 禁止制表符和空格混合使用

花括号使用如下:

if (flag) {
	fun();
	//...
}

void fun (void)
{ 
	//..
}

if (flag)
	fun();
//...

命名规范

  • Linux规定名称中不允许使用混合大小写字符
  • 单词之间用下划线分隔
  • 避免取有疑惑的简单名称, 如pad(), 应该写成 platform_add_devices()

代码长度

  • 每行尽量不超过80个字符(可进行有意义分行切割)
  • 函数体代码长度尽量不超过两屏
  • 函数局部变量尽量不超过十个
  • 根据函数使用频率和函数体大小可以使用inline声明, 以提高调用效率

注释

  • 一般情况用于描述代码可以做什么和为什么要做, 尽量不写实现方式
  • 函数的修改和维护日志统一集中在文件开头

在程序中对ifdef的处理

一般不这么用:

//...
#ifdef CONFIG_FUN
	fun();
#endif
//...

而是在声明处使用ifdef

#ifdef CONFIG_FUN
void fun (void)
{
	//...
} 
#else
inline void fun (void) { }
#endif

其他

  • 指针中的“ *” 号应靠近变量名, 而不是类型关键字
  • 函数之间用空行隔开
  • 函数导出申明紧跟在函数定义的下面

代码风格的事后修正

indent命令是大多数Linux系统中都带有的工具, 当得到一段与内核编码风格大相径庭的代码时, 可以通过这个工具进行
调整:

#indent -kr -i8 -ts8 -sob -l80 -ss -bs -psl
<filename>

Linux内核启动引导过程

了解Linux镜像的格式及其产生过程

Linux内核有多种镜像格式:

Image : 直接生成并且无头部未压缩的内核, 一般用于PC机

zImage : Image的压缩版, 采用gzip进行压缩, 比Image体积小,但启动时需要进行自解压, 嵌入式系统中一般采用此种方法

uImage : 是u-boot专用的一种内核镜像格式, 它是在zImage的基础上又添加了一个长度为64字节的标签头, 在u-boot启动时会去掉此头信息, 仍按zImage启动, 头信息主要用于区分不同格式的内核镜像

xipImage : 片上执行的未压缩内核, (如norflash等)

zImage镜像产生过程:

vmlinux -> Image -> compressed / vmlinux -> zImage

vmlinux 是由以下内核代码生成的非压缩镜像 (arch/arm/kernel/head.s、 kernel/、 mm/、 fs/、 ipc/、 crypto/、 lib/、drivers/、 net/等等)

Image 是使用objcopy工具对vmlinux进行二进制化处理得到的镜像

arch/arm/boot/compressed/vmlinux由压缩的Image和 compressed/head.S、 misc.c等文件组成

zImage是由compressed/vmlinux使用objcopy工具二进制化得到

再对zImage加上头部就成为了uImage

image-20200701161524245

boot.img的生成过程 :

image-20200701161846753

boot.img是使用一种文件系统打包工具制作的, 相当于把各种非必须文件打包在一起成为一整个文件, 然后被烧写进设备

Linux内核的启动过程大体上可以分为3个阶段:

内核解压( 汇编+C)

  • 主要由arch/arm/boot/compressed/对zImage完成解压(C语言),并跳转到下阶段代码

板级引导阶段( 汇编)

  • 主要进行对cpu和体系结构的检查、 cpu本身的初始化以及页表的建立等

通用内核启动阶段( C语言)

  • 进入init/main.c文件, 从start_kernel开始进行内核初始化工作,最后调用rest_init

由rest_init()创建并进入内核第一个线程, 线程函数为 kernel_init()

在kernel_init()中会初始化各种驱动并建立起标准输入/ 标准输出/错误输出, 最后调用

在init_post()中会释放初始化内存段, 标志着内核启动完成, 并努力寻找一个用户进程, 通过kernel_execve()函数加载, 将该进程作为系统的第一个用户进程init,进程号为1

内核启动完成, 接下来就是用户的事儿了

Linux内核的配置与编译

Linux内核配置裁剪过程

make menuconfig

Linux内核编译过程

根据配置裁剪的结果配合Makefile完成内核编译

Linux内核这一配置编译机制

把驱动程序v_motor_driver.c(振动马达驱动)添加 到内核源码来验证整个过程

在Linux2.6以后的版本中, 文件的组织是通过 Kconfig 和 Makefile 来实现的

通过每层目录的 Kconfig 和 Makefile 实现了整个Linux 内核的分布式配置

  • Kconfig: 对应内核模块的配置菜单
  • Makefile: 对应内核模块的编译选项

Kconfig包含了当前目录下所有模块的配置

子目录的Makefile在被顶层Makefile调用时, 会负责编译当前目录下的所有模块

当有新的模块被加入时, 需要更改当前目录下的Kconfig文件, 并且更改对应的Makefile文件, 这样在最终编译之前, 可以通过

make menuconfig 对需要添加的模块进行配置和添加

当保存make menuconfig时, 系统除了会自动更新.config外, 还会将选项以宏的形式保存在内核根目录下的include/generated/autoconf.h文件下

当执行make menuconfig时, 配置工具会自动根据根目录下的ARCH变量读取arch/$(ARCH)/Kconfig文件来生成配置界面, 这个文件是所有文件的总入口, 其它目录的Kconfig都由它来引用, 如图所示:

image-20200701165024280

ARM平台为例讲解其具体配置过程

当执行make menuconfig时, 系统首先读取 arch/arm/Kconfig生成整个配置界面

在读取配置界面的同时, 系统会读取顶层目录下的.config文件生成所有配置选项的默认值

当修改完配置并保存后, 系统会更新顶层目录下的.config文件

当执行make时, 各层的Makefile会根据.config文件中的编译选项来决定哪些文件会被编译到内核中, 或编译成模块

Kconfig语法格式可以参考具体文件, 如:drivers/char/Kconfig

# SPDX-License-Identifier: GPL-2.0
#
# Character device configuration

# comment: 注释信息, 菜单和.config文件中都会出现
# string: 字符串; hex: 16进制的数; int: 10进制的数
# choice/endchoice: 表示选择性的菜单条目

# menu/endmenu: 表示生成一个菜单
menu "Character devices"
# source: 用于包含其它Kconfig
source "drivers/tty/Kconfig"
#config代表一个选项的开始,最终会出现在.config中(会自动增加一个CONFIG_前缀)
config DEVMEM
	#bool代表此选项仅能选中或不选中,bool后面的字符串代表此选项在make menuconfig中的名字
	bool "/dev/mem virtual device support"
	#default: 默认选项值
	default y
	help
	  Say Y here if you want to support the /dev/mem device.
	  The /dev/mem device is used to access areas of physical
	  memory.
	  When in doubt, say "Y".

config DEVKMEM
	bool "/dev/kmem virtual device support"
	# On arm64, VMALLOC_START < PAGE_OFFSET, which confuses kmem read/write
	# depends on:依赖其余的选项
	depends on !ARM64
	help
	  Say Y here if you want to support the /dev/kmem device. The
	  /dev/kmem device is rarely used, but can be used for certain
	  kind of kernel debugging operations.
	  When in doubt, say "N".

source "drivers/tty/serial/Kconfig"
source "drivers/tty/serdev/Kconfig"

config TTY_PRINTK
	#tristate: 代表可以选择编译、 不编译、 编译成模块
	tristate "TTY driver to output user messages via printk"
	depends on EXPERT && TTY
	default n
	---help---
	  If you say Y here, the support for writing user messages (i.e.
	  console messages) via printk is available.

	  The feature is useful to inline user messages with kernel
	  messages.
	  In order to use this feature, you should output user messages
	  to /dev/ttyprintk or redirect console to this TTY.

	  If unsure, say N.

config VIRTIO_CONSOLE
	tristate "Virtio console"
	depends on VIRTIO && TTY
	# select: 表示当前config被选中时, 此选项也被选中
	select HVC_DRIVER
	help
	  Virtio console for use with hypervisors.

	  Also serves as a general-purpose serial device for data
	  transfer between the guest and host.  Character devices at
	  /dev/vportNpn will be created when corresponding ports are
	  found, where N is the device number and n is the port number
	  within that device.  If specified by the host, a sysfs
	  attribute called 'name' will be populated with a name for
	  the port which can be used by udev scripts to create a
	  symlink to the device.

//....

endmenu

将自己开发的内核代码加入到Linux内核中, 需要有3个步骤:

把自己编写的代码放到内核中合适的位置

把自己开发的功能增加到Linux内核的配置选项中, 使用户能够选中这项功能并编译

构建或修改Makefile, 根据用户的选择, 将相应的代码编译到最终生成的Linux内核中去

将 振动马达的驱动添加进内核为例 , 讲解配置机制的具体应用

添加步骤如下:

Step1: 将v_motor_driver.c拷到drivers/char/目录下

Step2: vi driver/char/Kconfig,在Kconfig文件结尾, 在endmenu的前面加入一个config选项

config 6818_VMOTOR
	bool "The Vibration motor driver ofr S5P6818"
	default y
	help
		The driver for Vibration motor device

endmenu

Step3: make menuconfig(添加配置选项)

Device driver —> character devices —> [*] The Vibration motor driver for S5P6818

Step4: vi driver/char/Makefile添加内容如下:

obj-$(CONFIG_6818_VMOTOR)		+= v_motor_driver.c

Step5: make (更新内核镜像到开发板)

Step6: 交叉编译 测试程序, 并放到开发板运行

arm-linux-gcc v_motor_test.c -o v_motor_test

./v_motor_test 1

Linux3.4.39内核移植

以Linux3.4.39内核在开发板上的移植为例, 学习如何从一个纯净的Linux内核编译、 配置得到适合在一个特定平台运行的镜像。 具体移植步骤如下:

  • 源码解压
  • 添加BSP
  • 修改顶层和BSP下Makefile
  • 修改链接地址机器ID号并拷贝默认配置文件
  • 移植串口驱动支持
  • emmc驱动移植
  • ext4文件系统的支持移植
  • 内核配置、 编译

练习:

  • 添加键盘驱动到Linux-3.4.39
  • Linux-3.4.39内核移植
  • Linux-3.4.39内核LCD移植
  • Linux-3.4.39内核修改开机logo
物联网4(嵌入式系统启动过程、U-Boot、Linux内核、根文件系统) 介绍嵌入式系统启动过程、U-Boot、Linux内核、根文件系统 阅读详情

相关推荐

从GEC6818到Smart6818:手把手教你移植友善之臂64位Ubuntu系统(内核4.4)

本文详细介绍了如何将GEC6818开发板从32位系统升级到64位Ubuntu系统,涵盖uboot移植、内核配置、Qt环境搭建等关键步骤。通过s5p6818处理器的优化配置和OpenGL硬件加速,使老旧开发板焕发新生,适合嵌入式开发者进行系统移植和性能优化。

weixin_33738555的博客 461

S5P6818

S5p6818

weixin_45482852的博客 653

GEC6818开发板二手捡漏指南:如何用最低成本玩转64位Linux系统移植

本文详细介绍了如何通过二手GEC6818开发板低成本学习64位Linux系统移植。从淘货验机到系统移植全流程,包括uboot修改、Linux内核适配和Qt5硬件加速编译,帮助开发者以最低成本掌握嵌入式开发核心技能。

weixin_30335575的博客 422

Linux内核源码的配置和编译

测试uImage是否可以正常启动,并且挂载根文件系统(重启开发板,自动方式:先将uImage下载到内存里面,然后bootcmd启动内核,然后给内核传递参数。错误的原因:找不到mkimage命令,根据提示分析出来mkimage应该存在uboot源码目录中。将arch/arm/boot/目录下的uImage拷贝到tftpboot目录下,拷贝到到ubuntu的/use/bin目录下:绝对路径。将uboot源码的tools目录下的mkimage,拿到内核源码之后,应该先清除,内核源码中的中间文件。

m0_68672255的博客 1895

GEC6818开发板64位Linux系统移植实战:从零到启动的完整指南

本文提供了一份详尽的GEC6818开发板64位Linux系统移植实战指南。文章从选择该开发板的原因讲起,详细阐述了移植前的准备工作,并分步讲解了U-Boot引导程序移植、64位Linux内核配置编译、根文件系统准备与整合测试、外设驱动调试以及最终将系统迁移至eMMC的全过程。通过本指南,开发者可以深入掌握嵌入式Linux系统移植的核心技能,将老旧开发板改造为功能完善的现代学习平台。

weixin_29158047的博客 263

GEC6818开发板64位Linux系统移植实战:从零到启动的全过程解析

本文详细解析了GEC6818开发板64位Linux系统移植的全过程,从开发环境搭建到U-Boot移植、Linux内核配置、根文件系统构建及外设驱动调试。通过实战案例,帮助开发者掌握S5P6818处理器的64位系统移植技巧,提升嵌入式开发效率与性能。

weixin_29176179的博客 288

6818重新编译boot.img,对占用gpio做解除

之前insmod驱动 发现已经busy了,好像卸载干净了,还是这样 所以只能从内核入手,重新编译内核,更改驱动 编译内核 进入源码包 先在这里执行一次mk增加环境 export PATH=./GEC6818uboot/tools:$PATH 进入我们的kernel cp ./gec6818_linux_config .config make menuconfig 退出保存 make -j4 ARCH=arm CROSS_COMPILE=../prebuilts/gcc/linux-x

weixin_43898067的博客 850

从4418到6818:手把手教你升级S5P6818开发板,解锁A53八核性能

本文详细介绍了如何从S5P4418升级到S5P6818开发板,解锁Cortex-A53八核处理器的强大性能。通过硬件对比、环境搭建、固件烧录和系统移植的实战指南,帮助开发者充分利用6818开发板的性能优势,适用于多媒体处理、复杂算法运算等高要求场景。

weixin_30410119的博客 416

步进电机工作原理与编程

                    步进电机工作原理与编程本章将介绍在嵌入式平台UP-NETARM2410-S中步进电机的实现。步进电机在各个领域诸如机器人、智能控制、工业控制等方面都有着广泛的应用空间,本章着重介绍步进电机的工作原理及编程实现步进电机驱动的方法,主要内容如下:l        步进电机的概述l        步进电机的工作原理l        和微处理器的总线

空之轨迹~约修亚 6446

Linux媒体音乐播放器项目设计编程(6818)

Linux媒体音乐播放器项目设计编程(6818) Linux项目设计:斗罗大陆宣传系统、基于Linux系统的媒体播放器、可播放音视频图片(基于gec6818项目设计) 项目功能展示: 一、开机显示登入界面,可密码管理员登入,也可以免密码普通用户登入 二、登入后显示桌面,显示5个应用 ,分别是图片、视频、音乐、设置、文件管理 三、音乐相册功能,播放图片同时播放背景音乐,可以左右滑动切换图片等操作 四、视频播放功能,可以播放avi,mp4等格式视频 五、音乐播放器,可以播放mp3格式的音频 六、设置壁纸,可以根据喜好设置自己喜欢的壁纸 七、文件管理,可以对文件进行预览和删除 一、项目课题: 基于ARM平台的广告机系统设计 (最好可以自己取

给jetson nano 安装AX200网卡驱动

几经波折,因为在网上看到的基本都是amd版本而非arm版,然后最终选定V5.5是因为更新的几个版本的arm版本是false的(在https://kernel.ubuntu.com/~kernel-ppa/mainline/处选择版本时,得看在arm64上是false还是build succeeded,之前没经验呀刚刚才顿悟的) 1,参考文章https://blog.youkuaiyun.com/MIRANA0/article/details/106696334 学到了得下载如下四个: wget https://k

发嘎嘎的博客 2346

linux内核移植演示

1、前言 本文档主要记录了linux内核移植的方法和步骤,对linux内核启动过程不做解释和说明。本文档基于linux3.4.39内核版本移植,ARM开发板为s5p6818板。 2、内核编译步骤 1、编译u-boot,生成配置规则,为内核编译做准备 u-boot编译参考:linux-Bootloader(Uboot)移植流程。 2、复制u-boot/tools下的mkimage到系统根目录/bi...

qq_41583666的博客 428

YOLOv11 + TensorRT 在 Jetson 设备上的实时部署

YOLOv11 + TensorRT 在 Jetson 设备上的实时部署

p6666666668的博客 1589

s5p6818/fs4418系统移植之uboot的移植

/***************** uboot移植 ******************/ 【1】获取u-boot源码 1. u-boot官方网站 https://ftp.denx.de/pub/u-boot/ 2. 开发板厂家 3. 芯片厂家 4. 主管领导(推荐) 第1种和第2,3,4种有何区别? 芯片厂家没有将芯片的uboot支持的源码开源 到u-boot官方源码中, uboot官方源码不支持此处理器。 S5P6818芯片三星没有将支持此处理器的 源码开源到ub.

Linux_zhicheng的博客 3406

MST-GAT: Enhancing Anomaly Detection in Multimodal Time Series with Intra- and Inter-Modal Attention

本文深入解析了MST-GAT模型,这是一种通过模态内与模态间注意力机制增强多模态时间序列异常检测的新方法。它通过构建图结构显式建模传感器间的复杂时空依赖,并结合时间卷积网络与联合优化策略,有效降低了传统方法中常见的误报与漏报问题,在工业监控等场景中展现出卓越性能。

weixin_29079671的博客 150

海康VisionMaster零代码开发实战:从PLC工程师到视觉专家的捷径

本文为PLC工程师提供了利用海康VisionMaster视觉平台实现零代码视觉开发的实战指南。文章详细阐述了如何通过图形化流程设计替代传统编程,快速搭建视觉检测应用,并实现与PLC的无缝通讯,是工程师从设备控制迈向视觉系统集成的有效捷径。

weixin_29201859的博客 293

物联网4(嵌入式系统启动过程、U-Boot、Linux内核、根文件系统)(1)

目录描述api这个目录里包含的API是U-Boot本身使用的,与嵌入式系统的硬件无关,通常是演示测试的代码。arch这个目录存放了与CPU架构相关的文件和代码。每个子目录对应一个特定的CPU架构,如arm、x86、powerpc等,在这些子目录中,你可以找到与架构相关的启动代码、中断处理、时钟设置等。可对不需要的子目录可删除,只保留需要的目录,如针对S5P6818开发板只保留arm子目录即可。board这个目录包含了与开发板相关的文件和代码。

2401_84010224的博客 1040

ESP32与INMP441麦克风模块实现音频传输

ESP32是一款低成本、低功耗的物联网开发板,支持Wi-Fi和蓝牙双模通信,内置双核处理器,适合音频处理和实时数据传输。INMP441是一款高性能数字麦克风模块,支持I2S接口,可提供高精度音频数据采集(24-bit分辨率,64-100 dB SNR)。

走向CTO的路上... 2044

Linux内核移植(Day15)

底板LCD+TS+SOUND+NET+GPIO+UART+...bootloader(uboot)--->加载inux内核(uImage)执行sudo/etc/init.d/networkingrestart。TF的存储空间【ubootpak.binuImage|文件系统】2.虚拟机---》设置---》网络适配器--》桥接模式。根据实际需求,将uboot或者linux内核做剪裁,链接https//pan.baidu.com/s/...

qq_45774917的博客 273

【PX4学习笔记】3. PX4 固件烧写(1 探索过程)

飞控型号:cube orange【PX4官方用户指南中关于cube orange的描述】 飞控载板型号:Mini Carrier Board【迷你载板说明文档】 固件安装参考:The Cube User Manual V1.0

【人工智障 | 计算鸡视觉 | 机器孩】 7677

FineReport实战-- 国内外各地区销售数据分析 多个图表联动

进行国内外各地区业务员销售数据分析是一项复杂但极具价值的任务,它可以帮助企业了解不同市场的表现,并据此调整销售策略以提高整体绩效。实现功能:同一个报表里面多个图表联动问题。

Davina_yu的博客 1201

粤嵌GEC6818开发板 LVGLv8 demo移植

参考了韦东山老师的博客,将LVGLv8移植到粤嵌的GEC6818 Linux开发板上,记录了移植的主要过程和几个bug的解决办法。

qq_52059868的博客 2145

5G射频设计中N77&N79的PRX为什么需要3个SRS

首先,我们来逐个拆解一下这个神秘的“

weixin_43199439的博客 1325

linux嵌入式6818,【转载】迅为iTOP-6818开发板 Linux-Qt4.7系统下4G模块移植笔记

本帖最后由 ky123 于 2018-3-30 17:17 编辑平台:iTOP-6818开发板图片14.jpg (118.31 KB, 下载次数: 22)2018-3-30 14:49 上传EC20 模块封装成标准的PCIe接口,和开发板主要通过usb通讯。 此次提供的文件有pppd 源码、编译好的chat和pppd工具、wcdma,wcdma_back,wcdma-chat-connect、wc...

weixin_31668621的博客 319

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

嵌入式Linux系统移植完全指南:从Bootloader到内核配置(收藏这一篇就够了)

摘要 本文全面介绍嵌入式Linux系统移植流程,重点解析uboot和Linux内核的配置与移植。内容涵盖嵌入式系统启动层次(从硬件上电到用户应用)、uboot架构与源码结构(包括启动代码分析和编译系统)、环境变量设置与常用命令。详细讲解了uboot的汇编启动阶段和C语言初始化过程,以及Kconfig配置系统和Makefile结构。通过本指南,开发者可掌握如何为特定硬件平台定制Linux系统,包括内存操作、Flash操作、文件系统管理和网络配置等关键技能。

weixin_71604156的博客 1332

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

上一篇: Linux开发--Linux内核开发移植
下一篇: Linux设备驱动核心
onnx
博客等级 码龄5年 1万+粉丝 416原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

onnx

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值