Ubuntu 上 hi3531 交叉编译环境 arm-hisiv100nptl-linux 建设过程-程序员宅基地

技术标签: 操作系统  嵌入式  c/c++  

安装SDK
1、Hi3531 SDK包的位置
    在"Hi3531_V100R001***/01.software/board"夹,你可以看到一个 Hi3531_SDK_Vx.x.x.x.tgz 文件,
文件就是Hi3531的软件开发包。


2、解压缩SDK包
    在linuxserver上(或者一台装有linux的PC上。主流的linux发行版本号均能够),使用命令:tar -zxf Hi3531_SDK_Vx.x.x.x.tgz ,
解压缩该文件,能够得到一个Hi3531_SDK_Vx.x.x.x文件夹。


3、展开SDK包内容
    返回Hi3531_SDK_Vx.x.x.x文件夹。执行./sdk.unpack(请用root或sudo权限执行)将会展开SDK包打包压缩存放的内容,请依照提示完毕操


作。
假设您须要通过WINDOWS操作系统中转拷贝SDK包。请先执行./sdk.cleanup。收起SDK包的内容,复制到新的文件夹后再展开。


4、在linuxserver上安装交叉编译器
    1)安装uclibc交叉编译器(注意,须要有sudo权限或者root权限):
       进入Hi3531_SDK_Vx.x.x.x/osdrv/toolchain/arm-hisiv100-linux文件夹。执行chmod +x cross.install,然后执行./cross.install


就可以。


    2) 安装glibc交叉编译器(注意,须要有sudo权限或者root权限):
       进入Hi3531_SDK_Vx.x.x.x/osdrv/toolchain/arm-hisiv200-linux文件夹,执行chmod +x cross.install,然后执行./cross.install


就可以。
    3) 运行source /etc/profile, 安装交叉编译器的脚本配置的环境变量就能够生效了,或者请又一次登陆也可。



在终端上输入命令  arm-linux 再按Tab键,能够看到下图,说明设置环境变量成功了

ls@ubuntu:/slq/nfs/mpp$ arm-hisiv100nptl-linux-
arm-hisiv100nptl-linux-addr2line  arm-hisiv100nptl-linux-gprof
arm-hisiv100nptl-linux-ar         arm-hisiv100nptl-linux-ld
arm-hisiv100nptl-linux-as         arm-hisiv100nptl-linux-nm
arm-hisiv100nptl-linux-c++        arm-hisiv100nptl-linux-objcopy
arm-hisiv100nptl-linux-c++filt    arm-hisiv100nptl-linux-objdump
arm-hisiv100nptl-linux-cpp        arm-hisiv100nptl-linux-ranlib
arm-hisiv100nptl-linux-g++        arm-hisiv100nptl-linux-readelf
arm-hisiv100nptl-linux-gcc        arm-hisiv100nptl-linux-size
arm-hisiv100nptl-linux-gcc-4.4.1  arm-hisiv100nptl-linux-strings
arm-hisiv100nptl-linux-gccbug     arm-hisiv100nptl-linux-strip
arm-hisiv100nptl-linux-gcov      


验证,编译一个hello.c文件

#include <stdio.h>
int main()
{
        printf("hello world!\n");
}

使用命令:arm-hisiv100nptl-linux-gcc hello.c -o hello 看是否编译成功

 root@ubuntu:/slq/test# ls
hello  hello.c

  可见成功生成了二进制文件。   



5、编译osdrv

1.osdrv使用说明
本文件夹设计思路为一套源码支持两种工具链编译。因此须要通过编译參数指定不同的工具链。当中arm-hisiv100nptl-linux是uclibc工具链。arm-hisiv200-linux是glibc工具链。

详细命令例如以下
(1)编译整个osdrv文件夹:
make OSDRV_CROSS=arm-hisiv100nptl-linux all
或者
make OSDRV_CROSS=arm-hisiv200-linux all
(2)清除整个osdrv文件夹的编译文件:
make OSDRV_CROSS=arm-hisiv100nptl-linux clean
或者
make OSDRV_CROSS=arm-hisiv200-linux clean
(3)彻底清除整个osdrv文件夹的编译文件,除清除编译文件外,还删除已编译好的镜像:
make OSDRV_CROSS=arm-hisiv100nptl-linux distclean
或者
make OSDRV_CROSS=arm-hisiv200-linux distclean
(4)单独编译kernel:
待进入内核源码文件夹后,运行下面操作
cp arch/arm/configs/godnet_defconfig .config
make ARCH=arm CROSS_COMPILE=arm-hisiv100nptl-linux- menuconfig
make ARCH=arm CROSS_COMPILE=arm-hisiv100nptl-linux- uImage
或者
cp arch/arm/configs/godnet_defconfig .config
make ARCH=arm CROSS_COMPILE=arm-hisiv200-linux- menuconfig
make ARCH=arm CROSS_COMPILE=arm-hisiv200-linux- uImage
(5)单独编译uboot:
待进入boot源码文件夹后。运行下面操作
make ARCH=arm CROSS_COMPILE=arm-hisiv100nptl-linux- godnet_config
make ARCH=arm CROSS_COMPILE=arm-hisiv100nptl-linux-
或者
make ARCH=arm CROSS_COMPILE=arm-hisiv200-linux- godnet_config
make ARCH=arm CROSS_COMPILE=arm-hisiv200-linux-
(6)制作文件系统镜像:
在osdrv/pub/中有已经编译好的文件系统,因此无需再反复编译文件系统,仅仅须要依据单板上flash的规格型号制作文件系统镜像就可以。


spi flash使用jffs2格式的镜像。制作jffs2镜像时,须要用到spi flash的块大小。

这些信息会在uboot启动时会打印出来。建议使用时先直接执行mkfs.jffs2工具。依据信息打印填写相关參数。以下以块大小为64KB为例:
osdrv/pub/bin/pc/mkfs.jffs2 -d osdrv/pub/rootfs_uclibc -l -e 0x40000 -o osdrv/pub/rootfs_uclibc_256k.jffs2


osdrv/pub/bin/pc/mkfs.jffs2 -d osdrv/pub/rootfs_uclibc -l -e 0x10000 -o osdrv/pub/rootfs_uclibc_64k.jffs2
sudo osdrv/pub/bin/pc/mkfs.jffs2 -d osdrv/pub/rootfs_uclibc -l -e 0x10000 --pad=0x9A0000 -o osdrv/pub/rootfs_uclibc_64k.jffs2
sudo osdrv/pub/bin/pc/mkfs.jffs2 -d osdrv/pub/rootfs_uclibc_slq -l -e 0x10000 --pad=0x9A0000 -o osdrv/pub/rootfs_uclibc_64k_slq.jffs2


sudo osdrv/pub/bin/pc/mkfs.jffs2 -d osdrv/pub/rootfs_custom_slq -l -e 0x10000 --pad=0x100000 -o osdrv/pub/rootfs_custom_64k_slq.jffs2
或者
osdrv/pub/bin/pc/mkfs.jffs2 -d osdrv/pub/rootfs_glibc -l -e 0x40000 -o osdrv/pub/rootfs_glibc_256k.jffs2


nand flash使用yaffs2格式的镜像,制作yaffs2镜像时,须要用到nand flash的pagesize和ecc。

这些信息会在uboot启动时会打印出来。建议使用时先直接执行mkyaffs2image工具,依据信息打印填写相关參数。以下以2KB pagesize、1bit ecc为例:
osdrv/pub/bin/pc/mkyaffs2image osdrv/pub/rootfs_uclibc osdrv/pub/rootfs_uclibc_2k_1bit.yaffs2 1 1
或者
osdrv/pub/bin/pc/mkyaffs2image osdrv/pub/rootfs_glibc osdrv/pub/rootfs_glibc_2k_1bit.yaffs2 1 1
(7)单独编译PCIE MCC驱动模块:
首先,先准备好编译模块时须要连接到的内核源码文件夹:
cd ./kernel/
tar -xvf linux-3.0.y.tgz
解压内核源码之后,须要依据详细的芯片类型,先编译内核(以Hi3531为例)。以生成对应的头文件
cd ./linux-3.0.y
cp arch/arm/configs/godnet_defconfig .config
make ARCH=arm CROSS_COMPILE=arm-hisiv100nptl-linux- menuconfig
make ARCH=arm CROSS_COMPILE=arm-hisiv100nptl-linux- uImage
内核源码准备完成,能够进入PCIE MCC驱动模块的源码文件夹,编译驱动:
cd ../../drv/pcie_mcc
假设是编译主片的ko,直接使用make命令
make
假设是编译从片的ko文件,请带上參数target=slave
make target=slave
(说明:默认情况下编译驱动的工具链是arm-hisiv100nptl-linux-,如需更改请带上參数 CROSS_COMPILE=arm-hisiv200-linux-)


2. 镜像存放文件夹说明
编译完的image,rootfs等存放在osdrv/pub文件夹下
pub
│  rootfs_uclibc.tgz ------------------------------------------ hisiv100nptl编译出的rootfs文件系统
│  rootfs_glibc.tgz ------------------------------------------- hisiv200编译出的rootfs文件系统

├─image_glibc ------------------------------------------------ hisiv200编译出的镜像文件
│      uImage ------------------------------------------------- kernel镜像
│      u-boot-hi3531_930MHz.bin ------------------------------- u-boot镜像
│      rootfs_256k.jffs2 -------------------------------------- jffs2 rootfs镜像(相应spi-flash blocksize=256K)
│      rootfs_2k_1bit.yaffs2 ---------------------------------- yaffs2 rootfs镜像(相应nand-flash pagesize=2K ecc=1bit)

├─image_uclibc ----------------------------------------------- hisiv100nptl编译出的镜像文件
│      uImage ------------------------------------------------- kernel镜像
│      u-boot-hi3531_930MHz.bin ------------------------------- u-boot镜像
│      rootfs_256k.jffs2 -------------------------------------- jffs2 rootfs镜像(相应spi-flash blocksize=256K)
│      rootfs_2k_1bit.yaffs2 ---------------------------------- yaffs2 rootfs镜像(相应nand-flash pagesize=2K ecc=1bit)

└─bin
    ├─pc
    │      mkfs.jffs2
    │      mkimage
    │      mkfs.cramfs
    │      mkyaffs2image
    │
    ├─board_glibc -------------------------------------------- hisiv200编译出的单板用工具以及pcie消息通讯层ko
    │      flash_eraseall
    │      mcc_usrdev_host.ko
    │      flash_erase
    │      mcc_usrdev_slv.ko
    │      hi35xx_dev_slv.ko
    │      nandwrite
    │      hi35xx_dev_host.ko
    │      mcc_drv_slv.ko
    │      mtd_debug
    │      flash_info
    │      mcc_drv_host.ko
    │      boot_device.ko
    │      pcit_dma_slv.ko
    │      sumtool
    │      mtdinfo
    │      flashcp
    │      nandtest
    │      nanddump
    │      parted_glibc
    │      pcit_dma_host.ko
    │      gdb-arm-hisiv200-linux
    │
    └─board_uclibc ------------------------------------------- hisiv100nptl编译出的单板用工具以及pcie消息通讯层ko
            flash_eraseall
            mcc_usrdev_host.ko
            flash_erase
            mcc_usrdev_slv.ko
            hi35xx_dev_slv.ko
            nandwrite
            hi35xx_dev_host.ko
            mcc_drv_slv.ko
            mtd_debug
            flash_info
            parted_uclibc
            mcc_drv_host.ko
            boot_device.ko
            pcit_dma_slv.ko
            sumtool
            mtdinfo
            flashcp
            nandtest
            gdb-arm-hisiv100nptl-linux
            nanddump
            pcit_dma_host.ko




3.osdrv文件夹结构说明:
osdrv
├─Makefile ------------------------------ osdrv文件夹编译脚本
├─busybox ------------------------------- 存放busybox源码的文件夹
├─tools --------------------------------- 存放各种工具的文件夹
│  ├─board_tools ----------------------- 各种单板上使用工具
│  │  ├─reg-tools-1.0.0 --------------- 寄存器读写工具
│  │  ├─mtd-utils --------------------- flash裸读写工具
│  │  ├─udev-100 ---------------------- udev工具集
│  │  ├─gdb --------------------------- gdb工具
│  │  ├─parted ------------------------ 大容量硬盘分区工具
│  │  └─e2fsprogs --------------------- mkfs工具集
│  └─pc_tools -------------------------- 各种pc上使用工具
│      ├─mkfs.cramfs ------------------- cramfs文件系统制作工具
│      ├─mkfs.jffs2 -------------------- jffs2文件系统制作工具
│      ├─mkimage ----------------------- uImage制作工具
│      ├─mkyaffs2image301 -------------- yaffs2文件系统制作工具
│      ├─nand_production --------------- nand flash烧写文件制作工具
│      └─uboot_tools ------------------- uboot镜像制作工具、xls文件及ddr初始化脚本、bootrom工具
├─toolchain ----------------------------- 存放工具链的文件夹
│  ├─arm-hisiv100nptl-linux ---------------- hisiv100nptl交叉工具链
│  └─arm-hisiv200-linux ---------------- hisiv200交叉工具链
├─pub ----------------------------------- 存放各种镜像的文件夹
│  ├─image_glibc ----------------------- 基于hisiv100nptl工具链编译,可供FLASH烧写的映像文件,包含uboot、内核、文件系统
│  ├─image_uclibc ---------------------- 基于hisiv200工具链编译,可供FLASH烧写的映像文件,包含uboot、内核、文件系统
│  ├─bin ------------------------------- 各种未放入根文件系统的工具
│  │  ├─pc ---------------------------- 在pc上运行的工具
│  │  ├─board_glibc ------------------- 基于hisiv100nptl工具链编译,在单板上运行的工具
│  │  └─board_uclibc ------------------ 基于hisiv200工具链编译,在单板上运行的工具
│  ├─rootfs_uclibc.tgz ----------------- 基于hisiv100nptl工具链编译的根文件系统
│  └─rootfs_glibc.tgz ------------------ 基于hisiv200工具链编译的根文件系统
├─drv ----------------------------------- 存放外设驱动的文件夹
│  └─pcie_mcc -------------------------- pcie消息通讯层驱动
├─rootfs_scripts ------------------------ 存放根文件系统制作脚本的文件夹
├─uboot --------------------------------- 存放uboot源码的文件夹
└─kernel -------------------------------- 存放kernel源码的文件夹




4.注意事项
(1)使用某一工具链编译后。假设须要更换工具链。请先将原工具链编译文件清除,然后再更换工具链编译。
(2)在windows下复制源代码包时,linux下的可运行文件可能变为非可运行文件,导致无法编译使用;u-boot或内核下编译后,会有非常多符号链接文件,在windows下复制这些源代码包, 会使源代码包变的巨大,由于linux下的符号链接文件变为windows下实实在在的文件。因此源代码包膨胀。因此使用时请注意不要在windows下复制源代码包。


(3)眼下网络为自适应模式,假设要改动为固定某种速率模式,须要改动文件kernel/linux-3.0.y/drivers/net/stmmac/stmmac_mdio.c:
关掉宏定义TNK_HW_PLATFORM_ADJUST,凝视掉33行;
选择须要固定配置的速率,比如固定配置为百兆全双工的话,打开46行宏定义PHY_SPEED_100就可以。


(4)Hi3531支持硬浮点,文件系统中公布的库都是硬浮点库。因此请用户注意,全部Hi3531板端代码编译时须要在Makefile里面加入下面命令:
CFLAGS += -march=armv7-a -mcpu=cortex-a9 –mfloat-abi=softfp -mfpu=vfpv3-d16
CXXFlAGS +=-march=armv7-a -mcpu=cortex-a9 –mfloat-abi=softfp -mfpu=vfpv3-d16
当中CXXFlAGS中的XX依据用户Makefile中所使用宏的详细名称来确定,e.g:CPPFLAGS。



參考:

http://blog.csdn.net/mybelief321/article/details/9076583

 

Ubuntu12.04嵌入式交叉编译环境arm-linu-gcc搭建过程。图解

分类: Qt编程   2462人阅读  评论(2)  收藏  举报

安装环境

       Linux版本号:Ubuntu 12.04    内核版本号:Linux 3.5.0   交叉编译器版本号:arm-linux-gcc-4.4.3 这个版本号的交叉编译器我已经上传到了资源上,能够随便下载,点此下载

安装前的絮叨

    首先简介一下,所谓的搭建交叉编译环境。即安装、配置交叉编译工具链。在该环境下编译出嵌入式Linux系统所需的操作系统、应用程序等,然后再上传到目标机上。

   交叉编译工具链是为了编译、链接、处理和调试跨平台体系结构的程序代码。

对于交叉开发的工具链来说,在文件名上加了一个前缀,用来差别本地的工具链。

比如。arm-linux-表示是对arm的交叉编译工具链;arm-linux-gcc表示是使用gcc的编译器。除了体系结构相关的编译选项以外,其用法与Linux主机上的gcc相同。所以Linux编程技术对于嵌入式相同适用。只是,并非不论什么一个版本号拿来都能用,各种软件包往往存在版本号匹配问题。

比如,编译内核时须要使用arm-linux-gcc-4.3.3版本号的交叉编译工具链,而使用arm-linux-gcc-3.4.1的交叉编译工具链,则会导致编译失败。

   那么gcc和arm-linux-gcc的差别是什么呢?差别就是gcc是linux下的C语言编译器,编译出来的程序在本地运行。而arm-linux-gcc用来在linux下跨平台的C语言编译器,编译出来的程序在目标机(如ARM平台)上运行。嵌入式开发应使用嵌入式交叉编译工具链。

安装步骤

1、将压缩包arm-linux-gcc-4.4.3.tar.gz存放在一个文件夹下。这个文件夹就是你等会解压缩的文件夹,以后这个文件夹就不能随便删掉了,我的存放路径是 /home/song/software,例如以下图,记住这个路径,等会还会用到。

   

2、使用tar命令:tar zxvf arm-gcc-4.4.3.tar.gz将software文件夹下的arm-linux-gcc-4.4.3.tar.gz解压缩安装到当前文件夹下例如以下图

    

    通过下图能够看到解压成功了。而且解压后的文件存放在了/home/song/software/opt/FriendlyARM/toolschain/4.4.3目录下,例如以下图所看到的,这个存放路径可得记住,例如以下图

   

3、接下来配置系统环境变量,把交叉编译工具链的路径加入到环境变量PATH中去。这样就能够在不论什么文件夹下使用这些工具。记下上一步中的安装路径。使用命令:vim /etc/profile 编辑profile文件,加入环境变量。

      

   在profile中最后一行加入:  export PATH=$PATH:/home/song/software/opt/FriendlyARM/toolschain/4.4.3/bin  这个路径就是那个bin文件夹所在的路径。可能你的不一样,依照你实际的文件夹填就能够了,例如以下图32行

   

   编写完保存就好了

4、使用命令:source /etc/profile 使环境变量生效

5、在终端上输入命令  arm-linux 再按Tab键。能够看到下图,说明设置环境变量成功了

   

6、使用命令:arm-linux-gcc -v 会出现以下的错误提示:/home/song/software/opt/FriendlyARM/toolschain/4.4.3/bin/arm-linux-gcc: 15: exec: /home/song/software/opt/FriendlyARM/toolschain/4.4.3/bin/.arm-none-linux-gnueabi-gcc: not found

   

  说是出现这样的问题的解决办法是因为Ubuntu12.04用的是64位的,解决方法就是使用命令:sudo apt-get install ia32-libs 装一些32位的库

   

7、待安装完32位的库之后,再使用命令:arm-linux-gcc -v,这一次就成功了,例如以下图

   

8、验证,编译一个hello.c文件

  

  使用命令:arm-linux-gcc hello.c -o hello 看是否编译成功

  

  可见成功生成的二进制文件。

转载于:https://www.cnblogs.com/lcchuguo/p/5042789.html

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/aofan9566/article/details/101822024

智能推荐

使用nginx解决浏览器跨域问题_nginx不停的xhr-程序员宅基地

文章浏览阅读1k次。通过使用ajax方法跨域请求是浏览器所不允许的,浏览器出于安全考虑是禁止的。警告信息如下:不过jQuery对跨域问题也有解决方案,使用jsonp的方式解决,方法如下:$.ajax({ async:false, url: 'http://www.mysite.com/demo.do', // 跨域URL ty..._nginx不停的xhr

在 Oracle 中配置 extproc 以访问 ST_Geometry-程序员宅基地

文章浏览阅读2k次。关于在 Oracle 中配置 extproc 以访问 ST_Geometry,也就是我们所说的 使用空间SQL 的方法,官方文档链接如下。http://desktop.arcgis.com/zh-cn/arcmap/latest/manage-data/gdbs-in-oracle/configure-oracle-extproc.htm其实简单总结一下,主要就分为以下几个步骤。..._extproc

Linux C++ gbk转为utf-8_linux c++ gbk->utf8-程序员宅基地

文章浏览阅读1.5w次。linux下没有上面的两个函数,需要使用函数 mbstowcs和wcstombsmbstowcs将多字节编码转换为宽字节编码wcstombs将宽字节编码转换为多字节编码这两个函数,转换过程中受到系统编码类型的影响,需要通过设置来设定转换前和转换后的编码类型。通过函数setlocale进行系统编码的设置。linux下输入命名locale -a查看系统支持的编码_linux c++ gbk->utf8

IMP-00009: 导出文件异常结束-程序员宅基地

文章浏览阅读750次。今天准备从生产库向测试库进行数据导入,结果在imp导入的时候遇到“ IMP-00009:导出文件异常结束” 错误,google一下,发现可能有如下原因导致imp的数据太大,没有写buffer和commit两个数据库字符集不同从低版本exp的dmp文件,向高版本imp导出的dmp文件出错传输dmp文件时,文件损坏解决办法:imp时指定..._imp-00009导出文件异常结束

python程序员需要深入掌握的技能_Python用数据说明程序员需要掌握的技能-程序员宅基地

文章浏览阅读143次。当下是一个大数据的时代,各个行业都离不开数据的支持。因此,网络爬虫就应运而生。网络爬虫当下最为火热的是Python,Python开发爬虫相对简单,而且功能库相当完善,力压众多开发语言。本次教程我们爬取前程无忧的招聘信息来分析Python程序员需要掌握那些编程技术。首先在谷歌浏览器打开前程无忧的首页,按F12打开浏览器的开发者工具。浏览器开发者工具是用于捕捉网站的请求信息,通过分析请求信息可以了解请..._初级python程序员能力要求

Spring @Service生成bean名称的规则(当类的名字是以两个或以上的大写字母开头的话,bean的名字会与类名保持一致)_@service beanname-程序员宅基地

文章浏览阅读7.6k次,点赞2次,收藏6次。@Service标注的bean,类名:ABDemoService查看源码后发现,原来是经过一个特殊处理:当类的名字是以两个或以上的大写字母开头的话,bean的名字会与类名保持一致public class AnnotationBeanNameGenerator implements BeanNameGenerator { private static final String C..._@service beanname

随便推点

二叉树的各种创建方法_二叉树的建立-程序员宅基地

文章浏览阅读6.9w次,点赞73次,收藏463次。1.前序创建#include&lt;stdio.h&gt;#include&lt;string.h&gt;#include&lt;stdlib.h&gt;#include&lt;malloc.h&gt;#include&lt;iostream&gt;#include&lt;stack&gt;#include&lt;queue&gt;using namespace std;typed_二叉树的建立

解决asp.net导出excel时中文文件名乱码_asp.net utf8 导出中文字符乱码-程序员宅基地

文章浏览阅读7.1k次。在Asp.net上使用Excel导出功能,如果文件名出现中文,便会以乱码视之。 解决方法: fileName = HttpUtility.UrlEncode(fileName, System.Text.Encoding.UTF8);_asp.net utf8 导出中文字符乱码

笔记-编译原理-实验一-词法分析器设计_对pl/0作以下修改扩充。增加单词-程序员宅基地

文章浏览阅读2.1k次,点赞4次,收藏23次。第一次实验 词法分析实验报告设计思想词法分析的主要任务是根据文法的词汇表以及对应约定的编码进行一定的识别,找出文件中所有的合法的单词,并给出一定的信息作为最后的结果,用于后续语法分析程序的使用;本实验针对 PL/0 语言 的文法、词汇表编写一个词法分析程序,对于每个单词根据词汇表输出: (单词种类, 单词的值) 二元对。词汇表:种别编码单词符号助记符0beginb..._对pl/0作以下修改扩充。增加单词

android adb shell 权限,android adb shell权限被拒绝-程序员宅基地

文章浏览阅读773次。我在使用adb.exe时遇到了麻烦.我想使用与bash相同的adb.exe shell提示符,所以我决定更改默认的bash二进制文件(当然二进制文件是交叉编译的,一切都很完美)更改bash二进制文件遵循以下顺序> adb remount> adb push bash / system / bin /> adb shell> cd / system / bin> chm..._adb shell mv 权限

投影仪-相机标定_相机-投影仪标定-程序员宅基地

文章浏览阅读6.8k次,点赞12次,收藏125次。1. 单目相机标定引言相机标定已经研究多年,标定的算法可以分为基于摄影测量的标定和自标定。其中,应用最为广泛的还是张正友标定法。这是一种简单灵活、高鲁棒性、低成本的相机标定算法。仅需要一台相机和一块平面标定板构建相机标定系统,在标定过程中,相机拍摄多个角度下(至少两个角度,推荐10~20个角度)的标定板图像(相机和标定板都可以移动),即可对相机的内外参数进行标定。下面介绍张氏标定法(以下也这么称呼)的原理。原理相机模型和单应矩阵相机标定,就是对相机的内外参数进行计算的过程,从而得到物体到图像的投影_相机-投影仪标定

Wayland架构、渲染、硬件支持-程序员宅基地

文章浏览阅读2.2k次。文章目录Wayland 架构Wayland 渲染Wayland的 硬件支持简 述: 翻译一篇关于和 wayland 有关的技术文章, 其英文标题为Wayland Architecture .Wayland 架构若是想要更好的理解 Wayland 架构及其与 X (X11 or X Window System) 结构;一种很好的方法是将事件从输入设备就开始跟踪, 查看期间所有的屏幕上出现的变化。这就是我们现在对 X 的理解。 内核是从一个输入设备中获取一个事件,并通过 evdev 输入_wayland

推荐文章

热门文章

相关标签