linux开发环境安装
Linux下搭建C#开发环境

文章来源/articles/116249.htm如果平时主要开发控制台类、组件、后端服务等程序,可以尝试在Linux类操作系统下搭建C#.Net 开发环境,好处是在Linux环境里你不用担心朋友或同事拿你的电脑来玩魔兽世界或者一不小心被装了一大堆流氓软件;-)先看看本篇文章最终效果:在Ubuntu里跑的开发环境MonoDevelop:1、Linux发行版的选择在Linuxux操作系统里只要安装Mono环境就可以开发C#程序,Linux的众多发行版RedHat/CentOS/Fedora、OpenSuse、Debian、Ubuntu都可以安装 Mono。
鉴于目前Ubuntu 容易安装、界面漂亮而且比较多人用作桌面环境,所以这里推荐使用Ubuntu 10.04 。
官方网站是:/在官方网站下载回来的是一个光盘映像文件(ISO格式),这里需要注意的是Ubuntu 共有4个不同版本的ISO文件:Desktop版、Alternative版、Netbook版、 Server版。
一般下载Desktop 就可以了。
如果你想通过网络启动安装程序或者使用硬盘安装则需要下载Alternative版。
如果你的电脑硬件配置比较低(内存少于等于 512MB),还可以下载一个轻量级的衍生版:Xubuntu (/),如果你的电脑只有256MB内存,那还可以下载另一个衍生版Lubuntu (/),这个更加轻量级,平时系统启动后只占用 70~100MB内存。
2、安装Ubuntu安装Ubuntu 的方法非常简单,跟装 WinXP差不多,只需点5,6次“下一步”过10来分钟就可以完成。
因为关于安装Ubuntu的过程已经有大量的文章介绍,这里就不再赘述了,下面主要列举一下安装方式,大家可以根据自己的具体情况选择合适的:(1)虚拟机安装如果你的电脑速度飞快,内存比较大,用这种方式安装最快,虚拟机软件推荐使用免费的VirtualBox。
先装好虚拟机软件,然后创建一个新的虚拟机,把下载回来的ISO文件挂靠到虚拟机,启动之后就可以安装了。
Linux命令行中的软件编译和安装技巧

Linux命令行中的软件编译和安装技巧Linux操作系统作为一种开源操作系统,提供了强大而灵活的命令行界面。
在Linux系统中,经常需要通过编译源代码来安装软件。
本文将介绍一些在Linux命令行中进行软件编译和安装的技巧。
一、安装编译环境在编译软件之前,首先需要安装编译环境。
常见的编译环境包括gcc编译器、make工具和一些必要的开发库。
可以使用以下命令来安装:```shellsudo apt-get install build-essential```该命令会自动安装gcc编译器、make工具和一些常用的开发库。
二、下载源代码要编译安装软件,首先需要下载软件的源代码。
通常,软件的官方网站会提供源代码的下载链接。
可以使用以下命令来下载源代码:```shellwget <source-code-url>```请将`<source-code-url>`替换为软件的源代码链接。
三、解压源代码下载完成后,需要将源代码文件进行解压。
常见的文件格式包括tar.gz和zip。
可以使用以下命令来解压源代码:```shelltar -zxvf <source-code-file.tar.gz>```请将`<source-code-file.tar.gz>`替换为下载的源代码文件名。
四、配置和编译解压源代码后,需要进行配置和编译。
通常,源代码目录中会包含一个名为`configure`的脚本,用于配置软件的编译选项。
可以使用以下命令来配置软件:```shell./configure```配置完成后,可以使用以下命令来进行编译:```shellmake```五、安装软件编译完成后,可以使用以下命令来安装软件:```shellsudo make install```该命令会将编译后的可执行文件复制到系统的指定目录,使其可以在任何地方运行。
六、更新库缓存有时候,在安装完软件后,系统可能无法找到新安装的库文件。
linux之redis6.2环境安装与配置

linux之redis6.2环境安装与配置1. redis 6.2 系列1.1 安装进⼊,下载redis-6.2.4.tar.gz将下载好的 redis ⽂件压缩包,上传到 linux 系统中# 通过终端命令解压[root@localhost local]# tar -zxvf redis-6.2.4.tar.gz# 重命令 redis,改不改问题不⼤,个⼈习惯[root@hua local]# mv redis-6.2.4 redis# 注意 redis C语⾔开发安装需要 gcc 环境,才能正常运⾏[root@localhost local]# yum -y install gcc# 进⼊ redis 中,执⾏命令[root@localhost local]# cd redis[root@localhost redis]# make# 在进⼊到 src 中[root@localhost redis]# cd src[root@localhost src]# make install# 开启 redis 服务[root@localhost src]# ./redis-server ../redis.conf注意:这样开启服务,会有问题,它以前台模式运⾏服务,这样还需要另外⼀台连接服务器来对 redis 操作# 修改 redis.conf 配置⽂件[root@localhost src]# vim /usr/local/redis/redis.conf保存并开启服务测试# 进⼊到 redis 中的 src ⾥,开启服务时,带上 redis 配置⽂件[root@localhost src]# ./redis-server ../redis.conf# 连接 redis 客户端,进⾏操作,显⽰地址和端⼝表⽰ redis 连接成功,可以使⽤[root@localhost src]# ./redis-cli127.0.0.1:6379>远程连接# 综上,能够正常开启和连接服务,但是在windows中使⽤ RDM 或者 IDEA,就⽆法连接成功# 原因是没有设置远程连接# 修改 redis 配置⽂件[root@localhost src]# vim /usr/local/redis/redis.conf# 重启 redis 服务[root@localhost src]# ./redis-server ../redis.conf防⽕墙# 综上得到配置好还是远程连接不上,最后排查防⽕墙[root@localhost local]# systemctl status firewalld.service# 关闭防⽕墙[root@localhost local]# systemctl stop firewalld.service⾃启动# 编写⾃启动脚本# 注意在 /etc/init.d 中编写 redis ⽂件,/etc/init.d 就是开机初始化⽂件夹[root@localhost src]# vi /etc/init.d/redis配置信息#!/bin/sh# chkconfig: 2345 10 90# description: Start and Stop redis# 到本机安装redis后,存放redis命令的⽬录PATH=/usr/local/bin:/usr/local/redis/src# redis的默认端⼝,要和下⽂中的redis.conf中⼀致REDISPORT=6379# redis服务端的命令EXEC=/usr/local/redis/src/redis-server# redis客户端的命令这两个⼀般都在 PATH⽬录下REDIS_CLI=/usr/local/redis/src/redis-cli# reids的进程⽂件⽣成的位置PIDFILE=/var/run/redis.pid# redis的配置⽂件所在的⽬录CONF="/usr/local/redis/redis.conf"case "$1" instart)if [ -f $PIDFILE ]thenecho "$PIDFILE exists, process is already running or crashed." elseecho "Starting Redis server..."$EXEC $CONFfiif [ "$?"="0" ]thenecho "Redis is running..."fi;;stop)if [ ! -f $PIDFILE ]thenecho "$PIDFILE exists, process is not running."elsePID=$(cat $PIDFILE)echo "Stopping..."$REDIS_CLI -p $REDISPORT SHUTDOWNsleep 2while [ -x $PIDFILE ]doecho "Waiting for Redis to shutdown..."sleep 1doneecho "Redis stopped"fi;;restart|force-reload)${0} stop${0} start;;*)echo "Usage: /etc/init.d/redis {start|stop|restart|force-reload}" >&2 exit 1esac# 保存后,进⼊到 /etc/init.d 中[root@localhost src]# cd /etc/init.d# 查看⽂件权限[root@localhost init.d]# ll-rw-r--r--. 1 root root 18281 May 22 2020 functions-rwxr-xr-x. 1 root root 10613 Jul 9 19:32 mysql-rwxr-xr-x. 1 root root 4569 May 22 2020 netconsole-rwxr-xr-x. 1 root root 7928 May 22 2020 network-rw-r--r--. 1 root root 1160 Oct 2 2020 README-rw-r--r--. 1 root root 1898 Jul 15 16:20 redis# 修改 redis ⽂件权限[root@localhost init.d]# chmod 775 redis# 再次查看 redis 权限-rw-r--r--. 1 root root 18281 May 22 2020 functions-rwxr-xr-x. 1 root root 10613 Jul 9 19:32 mysql-rwxr-xr-x. 1 root root 4569 May 22 2020 netconsole-rwxr-xr-x. 1 root root 7928 May 22 2020 network-rw-r--r--. 1 root root 1160 Oct 2 2020 README-rwxr-xr-x. 1 root root 1898 Jul 15 16:20 redis# 测试是否有效[root@localhost init.d]# /etc/init.d/redis startStarting Redis server...Redis is running...# 最后添加⾃启[root@localhost init.d]# chkconfig --add redis# 开启⾃启[root@localhost init.d]# chkconfig redis on# 查看服务[root@localhost init.d]# chkconfig --list安装完毕!1.2 卸载查看是否安装了 redis 数据库# 查看是否存在 redis[root@localhost local]# rpm -qa | grep redis[root@localhost local]# find / -name redis/etc/selinux/targeted/active/modules/100/redis/usr/local/redis# 查看服务是否开启状态[root@localhost local]# ps -ef | grep 6379root 2854 1 0 14:31 ? 00:00:01 ./redis-server 0.0.0.0:6379root 6970 1465 0 14:41 pts/0 00:00:00 grep --color=auto 6379# 存在服务进程,将其杀死[root@localhost local]# kill -9 2854# 卸载 redis 服务[root@localhost local]# rm -rf /etc/selinux/targeted/active/modules/100/redis [root@localhost local]# rm -rf /usr/local/redis卸载完毕!。
Debian Linux操作系统 安装_设置笔记 (linux系统)

Debian Linux操作系统安装_设置笔记(linux系统)linux软件开发Debian安装/设置笔记1.使用2.6内核的话在开始引导的时候输入:linux26,否则默认使用使用的是2.4内核,也可以在输入:installgui(图形安装界面)或expertgui(专家图形安装界面)。
回车后进入图形安装界面,接着会出现选择安装的语言及地区,键盘类型,网络设定,镜像站点(cn99速度不错),硬盘分区,时区设定,root密码设定,普通用户建立,等等。
但只安装基本的系统,不要安装软件,然后安装grub.退出,重起。
2. 结束base-config后,就可以登入系统了登陆系统后先配置:source.list#vi /etc/apt/source.list添加cn99的debian源然后运行apt-get update和apt-get -u upgrade,升级系统至最新.3.安装编译器和VIM:apt-get install make gcc g++ gdbapt-get install vim4.安装常用工具:rcconf(启动服务器设置)hdparm(硬盘参数设置)lynx(终端下的Web浏览器)apmd(高级电源管理,我用的是2.4内核,不装此模块则无法自动关机,如果使用的是2.6内核则不用安装)bzip2 wget mc less sudo ncftp2 man manpages这样一个基本的Debian开发环境就搭建起来了。
5.Debian默认安装后ls命令是没有颜色的,需要自己手工设置下:在终端下输入vi ~/.bashrc找到#export LS_OPTIONS='--color=auto'#eval "'dircolors'"#alias ls='ls $LS_OPTIONS'#alias ll='ls $LS_OPTIONS -l'#alias l='ls $LS_OPTIONS -lA'把前面的注释符号#全都去掉,存盘退出,重新登录就可以了。
[编译]9、在Linux下搭建nordic最新基于zephyr的开发烧写环境
![[编译]9、在Linux下搭建nordic最新基于zephyr的开发烧写环境](https://img.taocdn.com/s3/m/ab812bd5ba4cf7ec4afe04a1b0717fd5360cb295.png)
[编译]9、在Linux下搭建nordic最新基于zephyr的开发烧写环境⽬录前⾔nRF Connect SDK 包括 libs 和 app demo,该 SDK + DEMO 是基于 ZephyrOS 实现的(因此,环境搭建会稍微⿇烦亿点点)!该 SDK ⽀持 nRF52, nRF53, and nRF91 系列芯⽚。
接下来会⼀步步介绍如何在 Arch Linux 上搭建该 SDK 的开发环境:Zephyr requirements and GNU ARM Embedded ToolchainnRF Connect SDKSEGGER Embedded Studio1、概述⾸先下载,linux上是个绿⾊版本,直接启动即可:然后根据Getting Started Assistant指导进⾏安装。
2、安装⼯具安装:git、wget、cmake、make、dtc、tk注:输⼊ cmake --version 校验 cmake 的版本,nRF Connect SDK 需要 cmake 的版本 ≥ 3.13.1。
安装 ninja-build:sudo pacman -S ninja安装 GPerf:sudo pacman -S gperf安装 ccache:sudo pacman -S ccache安装 dfu-util:sudo pacman -S dfu-util安装 python-pip (3):sudo pacman -S python-pip安装 python-setuptools(3):sudo pacman -S python-setuptools安装 python 轮⼦⼯具 python-wheel (3):sudo pacman -S python-wheel安装压缩⼯具 xz-utils:sudo pacman -S xz安装 file (linux 的 file 命令):sudo pacman -S file安装 west:west 是 ZephyrOS ⽤来做 CI 的⼯具。
Linux操作系统-实验1-环境搭建-指导书-PPT版本-V1

Linux操作系统第一章:Linux简介与系统安装实验一:实验环境搭建一台宿主机(Windows系统)加两台虚拟机(Desktop+Server)要求:(1)掌握VMware虚拟机的安装(2)利用VMware虚拟机安装Ubuntu Linux18.04桌面版操作系统(3)利用VMware虚拟机安装Ubuntu Linux18.04服务器版操作系统(4)从宿主机登录桌面环境和服务器环境(SSH登录)(5)练习涉及到的基本命令,如apt-get、ifconfig、ssh等(6)练习vim编辑文件基本操作等Tips:(1)绘制网络拓扑图(2)把遇到的问题和如何解决记录下来。
实验环境设置☐宿主机(Windows)•网络配置VMware Network Adapter(VMnet8)☐客户机•Ubuntu-Server(ubuntu-18.04.6-live-server-amd64)•Ubuntu-Desktop(ubuntu-18.04.6-desktop-amd64)虚拟机安装安装时网络类型选择NAT方式安装完成后的两台Ubuntu虚拟机宿主机:Windows记录宿主机IP地址客户机1:Ubuntu-Server命令行模式记录IP:192.168.126.130客户机2:Ubuntu-Desktop图形化操作方法记录IP:192.168.126.131NAT模式宿主机:Windows192.168.126.1192.168.126.130192.168.126.131客户机1:Ubuntu-Server客户机2:Ubuntu-DesktopSSH服务1.安装SSH服务2.启动SSH服务3.配置SSH服务(可选)4.验证SSH服务Desktop版客户机安装SSH服务Desktop版客户机安装SSH服务:sudo apt-get install openssh-serverDesktop版客户机启动SSH服务: sudo systemctl start sshDesktop版客户机启动SSH服务: sudo systemctl start sshDesktop版客户机端修改SSH配置文件:端口22修改为1022 vi /etc/ssh/sshd_configSSH验证-从宿主机连接Desktop客户机2: ********************.126.131SSH验证-从宿主机连接Server版客户机1: ***********************.126.130Desktop版客户机查看SSH状态:记录监听端口和连接情况Server版客户端1查看SSH状态Desktop版客户机安装 net-tools:sudo apt-get install net-toolsDesktop版客户机查看IP地址: ifconfigDesktop版客户机查看网络连接情况:Netstat -aServer版客户机查看网络连接情况:Netstat -a。
Linux系统下Ubuntu 16.04 LTS 32bit 英文版的RT-Thread开发环境搭建

Linux系统下Ubuntu 16.04 LTS 32bit 英文版的RT-Thread开发环境搭建1. 搭建步骤com1.1. 下载交叉编译工具cd ~1.2. 解压缩交叉编译工具tar -xzf xtensa-esp32-elf-linux32-1.22.0-61-gab8375a-5.2.0.tar.gz1.3. 安装必要的软件sudo apt-get install git wget make libncu1.4. 获取代码cd ~git clonehttps://github/BernardXiong/1.5. 修改工程中交叉编译工具的路径修改~/rtthread-esp-idf/rtconfig.py中exec_path的路径为:注路径中的ss为linux当前用户的用户名1.6. 编译首先修改个Makefile中的一个小错误,python 那行命令路径需要修改:pythonesp-idf-port/esp-idf/components/esptool_py/esptool/esptool.py --chip esp32elf2image --flash_mode "dio" --flash_freq "40m"--flash_size "4MB" -ortthread.bin rtthread-esp32.elfcd ~/rtthread-esp-idf1.7. 下载1) 由于Linux下普通用户无权限直接操作/dev/ttyUSB0,首先给当前用户加入相应的权限,以便后边烧写时不需要使用sudo权限:sudo usermod -aG dialout ss注:ss为linux当前用户的用户名python esp-idf-port/esp-idf/components/esptool_py/esptool/esptool.py--chip esp32 --port /dev/ttyUSB0 --baud 115200 --before"default_reset" --after "hard_reset" write_flash -z--flash_mode "dio" --flash_freq "40m" --flash_size detect0x1000 bootloader.bin 0x10000 rtthread.bin 0x8000 parchmod a+xburn_flash.batcd ~/rtthread-esp-idf(波特率:115200)2. 其他说明 2.1. Linux64bit、Windows及macos的交叉编译工具具体见https://github/BernardXiong/rtthread-esp-idf,里边有其他系统交叉编译工具的下载路径。
Linux下at91sam9x25嵌软开发测试环境搭建文档

硬件环境软件环境1 安装虚拟机1.1虚拟机选择Ubuntu 11.10以上版本(升级比较方便)1.2虚拟机的配置与升级apt-cache search package 搜索包apt-cache show package 获取包的相关信息,如说明、大小、版本等sudo apt-get install package 安装包sudo apt-get install package - - reinstall 重新安装包sudo apt-get -f install 修复安装"-f = ——fix-missing"sudo apt-get remove package 删除包sudo apt-get remove package - - purge 删除包,包括删除配置文件等sudo apt-get update 更新源sudo apt-get upgrade 更新已安装的包sudo apt-get dist-upgrade 升级系统sudo apt-get dselect-upgrade 使用dselect 升级apt-cache depends package 了解使用依赖apt-cache rdepends package 是查看该包被哪些包依赖sudo apt-get build-dep package 安装相关的编译环境apt-get source package 下载该包的源代码sudo apt-get clean && sudo apt-get autoclean 清理无用的包sudo apt-get check 检查是否有损坏的依赖2 Linux下安装交叉编译环境2.1安装步骤1)下载arm-2011.03-42-arm-none-eabi-i686-pc-linux-2)命令行安装# tar xvzf arm-2011.03-42-arm-none-eabi-i686-pc-linux-# cd arm-2011.033 安装arm设备编程工具SAM Boot Assistant(SAM-BA)3.1 Windows下安装1)安装sam-ba_;2)安装USB CDC驱动;图 3.1图 3.2图 3.3图 3.4图 3.5图 3.7打开SAM-BA 2图 3.8图 3.93.2 Linux下安装1)解压sam-ba_;2)安装USB CDC驱动;1/ Login with administrator rights2/ Unload usbserial module if it is already running #rmmod usbserial3/ Load usbserial kernel module#modprobe usbserial vendor=0x03eb product=0x61244/ Verify that the USB connection is established#lsusb -d 03eb:6124Bus 004 Device 006: ID 03eb:6124 Atmel Corp5/ Know which USB connection is established#dmesgkernel: usb 4-2: new full speed USB device using uhci_hcd and address 5kernel: usb 4-2: configuration #1 chosen from 1 choicekernel: usbserial_generic 4-2:1.0: generic converter detectedkernel: usbserial_generic: probe of 4-2:1.0 failed with error -5kernel: usbserial_generic 4-2:1.1: generic converter detectedkernel: usb 4-2: generic converter now attached to ttyUSBx=> you will have to use /dev/ttyUSBx to connect to your boardRunning SAM-BA CDC Serial version :Launch 'sam-ba_cdc_ file, and select your board and the /dev/ttyUSBxdevice where your board in mounted on.- Update the kernel:# apt-get install linux-image-generic linux-headers-generic- On 64 bits version install 32 bits libraries:# apt-get install ia32-libs- Give sam-ba execute permission if needed:$ chmod +x sam-ba- Connect the board- Create a symlink on /dev/ttyACM0# ln -s /dev/ttyACM0 /dev/ttyUSB0- Launch sam-baTested on:Ubuntu 10.04 64 bits (Ubuntu 10.10 32 bits (Ubuntu 10.10 64 bits (Ubuntu 10.10 64 bits (Ubuntu 11.10 64 bits alpha3How to check if your kernel is up to date ?$ dmesgIf you have something like that (not exactly the same) it's ok:[227274.230016] usb 5-1: new full speed USB device using uhci_hcd and address 5[227274.395739] cdc_acm 5-1:1.0: This device cannot do calls on its own. It is not a modem.[227274.395768] cdc_acm 5-1:1.0: ttyACM0: USB ACM deviceIf you don't have this part: 'This device cannot do calls on its own. It is not a modem.',your kernel is probably not up to date or the cdc_acm patch has not been backported.4 示例4.1 下载AT91Bootstrap源码1)得到源码;2)解压# tar xvzf AT91Bootstrap-5series_#cd AT91Bootstrap-5series_1.24.2 配置AT91Bootstrap和选择启动媒介1) 从NAND FLASH启动#make at91sam9xnf_defconfig2)添加环境变量#vi .profilePATH="$PATH:/root/Public/arm-2011.03/bin"export PATH#souce .profile3)配置AT91Bootstrap#make menuconfig4.3 编译AT91Bootstrap#export $CROSS_COMPILE=” arm-none-eabi-”#make clear#make在../AT91Bootstrap-5series_1.2/binaries下产生at91sam9x5ek-nandflashboot- 4.4 使用AT91Bootstrap二进制文件1)从NAND flash启动A T91Bootstrap图 4.1在NAND和SPI无效的前提下,启动SAM-BA,烧AT91Bootstrap到NAND flash,如图4.1所示:(1)在SAM-BA图形用户界面上选择NandFlash媒介选项卡;(2)1)在NAND有效的前提下,在Scripts下拉列表框中选择“Enable NandFlash”;然后点击“Execute”按钮,完成NandFlash的初始化,如图4.2所示;图 4.2.12)清除芯片上原来烧的信息图 4.2.2结果如图 4.5所示。
ARM-linux嵌入式开发环境安装参考手册

基础是你已经安装了Ubuntu,以及相关软件:超级终端minicom 及C/C++ compiler environment. 在Ubuntu上可使用下面终端命令安装minicoom和编译环境。
#sudo apt—get install minicom#sudo apt-get install build—essentialStep 1:将光盘 Linux 目录中的 arm—linux—gcc-4。
5.1—v6—vfp—20101103。
tgz 复制到 Lubuntu的当前目录下,执行解压命令:#sudo tar xvzf arm-linux-gcc-4.5.1-v6-vfp—20101103。
tgz –C /注意:C 后面有个空格,并且C 是大写的,它是英文单词“Change”的第一个字母,在此是改变目录的意思.这样 arm—linux-gcc 的相关文件就Copy到root用户的Opt目录中Step 2:把编译器路径加入系统环境变量,运行命令#sudo gedit ~/.bashrc编辑~/.bashrc 文件,注意“ bashrc ” 前面有一个“ . ”,修改最后一行为export PATH=$PATH:/opt/FriendlyARM/toolschain/4.5。
1/bin注意路径一定要写对,否则将不会有效。
如图,保存退出。
输入arm—linux—gcc –v,会出现如下信息,这说明交叉编译环境已经成功安装。
Step 3:编译链接 arm-qte-4。
7。
01) 解压包到自己制定的目录,例如 arm-qte-4.7。
02) 终端中运行。
/build-all(首先,注意不能双击运行,必须在终端中运行;其次,不使用 sudo)大约要安装2个小时当运行到出现如下提示后:cd src/tools/bootstrap/ && make -f Makefile installmake[1]:正在进入目录`/home/administrator/arm-qte-4.7。
Linux系统下的Android开发环境搭建

Linux系统下的Android开发环境搭建1简介 (2)2版本 (2)3系统结构 (2)4开发 (4)4.1应用开发 (4)4.1.1知识准备 (4)4.1.2环境搭建 (4)4.2系统开发 (5)4.2.1知识准备 (6)4.2.2环境搭建(32位) (6)4.2.3环境搭建(64位) (8)4.2.4典型示例 (10)1简介Android(读音[ˈændrɔɪd])是Google主持开发的开源移动平台。
整个平台包括操作系统、中间件、虚拟机、应用框架、应用。
该平台最初是作为智能手机操作系统开发的,随着发展,通过移植和修改,也可用于平板电脑和其他手持设备。
2版本Android的版本周期约为6个月。
已发布(截至2010年10月)的主要版本有1.0、1.1、1.5、1.6、2.1、2.2。
● 1.0、1.1、1.5(Cupcake)、1.6(Donut)已过时,新系统不应使用;● 2.1代号Eclair,是2.0和2.01的升级版,取代后两者,稳定版;● 2.2代号Froyo,为目前最新版,不断升级中。
支持Flash,详见Android 2.2Platform Highlights;● 3.0代号Gingerbread,计划中的版本,全新的UI、游戏性能,可能支持视频聊天;● 3.5代号Honeycomb,计划中的版本,有最低硬件要求,用于平板电脑。
版本代号即提取源码时使用的分支名。
3系统结构Android结构如图:● 1:应用应用是一个个独立的程序,如浏览器、计算器、游戏等。
应用使用Java 开发,基于Android SDK 。
● 2:应用框架是一些基础组件,供上层应用所调用,可以在多个应用之间共享的功能。
包括通知、视图、资源管理等。
● 3:本地库(native )主要由C/C++库组成。
● 4:Dalvik 虚拟机与核心库Android 应用使用Java 语言开发,但并非运行于Java 虚拟机之上,而是对.java 文件进行反编译-重编译而成dex 文件,运行在Dalvik 虚拟机上。
使用Vagrant在Windows下部署Linux开发环境

使用Vagrant在Windows下部署Linux开发环境通过百度云的开发,发现一个Web本地开发部署环境。
Vagrant就是这么一个虚拟主机管理器,基于Ruby开发,使用开源 VirtualBox 作为虚拟化支持,可以轻松的跨平台部署。
1.下载安装VirtualBox和Vagrant要使用Vagrant需要先安装依赖支持的VirtualBox。
下一步,下一步默认安装完成2个软件。
下载安装VirtualBox,官网:https:////virtualbox/4.3.12/VirtualBox-4.3.12-93733-Win.exe 下载安装Vagrant,官网:/https:///mitchellh/vagrant/vagrant_1.6.2.msi2.配置使用Vagrant 安装 ubuntu linuxhttp://www.vagrantbox.es/这里提供了超全的linux系统预制box包。
已经给您装好系统了,任君选取所需,我这里选ubuntu linux。
下载需要使用的Box :官方提供的范例:/precise32.box先把precise32.box下载好,放入你的工作目录,如C:\Documents and Settings\li然后增加Box,vagrant box add base precise32.box初始化vagrant init启动虚拟机vagrant up3.Vagrantfile配置目录下会生成对应的Vagrantfile,打开Vagrantfile配置文件,通过文本编辑器打开Vagrantfile可以进行一些常用配置。
a)网络配置Vagrant的网络有三种模式1、端口映射方式,映射虚拟机中端口到宿主机work :forwarded_port, guest: 80, host: 8080guest: 80 表示虚拟机中的80端口,host: 8080 表示映射到宿主机的8080端口。
linux环境下安装selenium(python3)

linux环境下安装selenium(python3)说点废话当我们正常在界⾯系统使⽤selenium时,会感觉很爽,因为能清楚的看到我们代码的实现的过程,当遇到报错,也能相对来说缩⼩错误范围,⼀般都能很快的找到问题所在;倘若我们想在Linux环境(⽆界⾯)中使⽤selenium,虽然在官⽹可以下载到linux环境下的chromedriver驱动⽂件,但是如何配置才能成功运⾏,话不多说了,上配置流程吧!来点实货1、安装chrome安装必要的库yum install mesa-libOSMesa-devel gnu-free-sans-fonts wqy-zenhei-fonts -y2、安装 chromedriver(末尾附chrome和chromedriver的对应版本)将下载的⽂件解压,放在如下位置unzip chromedriver_linux64.zipmv chromedriver /usr/bin/给予执⾏权限chmod +x /usr/bin/chromedriver3、运⾏代码,查看是否成功(python下)from selenium import webdriverdriver = webdriver.Chrome()------------2019年兼容版本对照表-----------具体的可看安装情况调整游览器和驱动的版本ChromeDriver 78.0.3904.11 (2019-09-12)---------Supports Chrome version 78ChromeDriver 77.0.3865.40 (2019-08-20)---------Supports Chrome version 77ChromeDriver 76.0.3809.12 (2019-06-07)---------Supports Chrome version 76ChromeDriver 75.0.3770.8 (2019-04-29)---------Supports Chrome version 75ChromeDriver v74.0.3729.6 (2019-03-14)--------Supports Chrome v74ChromeDriver v2.46 (2019-02-01)----------Supports Chrome v71-73送点东西selenium模式chrome_options.add_argument('--headless') # ⽆头模式,可不启⽤界⾯显⽰运⾏chrome_options.add_argument('--disable-gpu') # 禁⽤GPU加速chrome_options.add_argument('--start-maximized')#浏览器最⼤化chrome_options.add_argument('--window-size=1280x1024') # 设置浏览器分辨率(窗⼝⼤⼩)chrome_options.add_argument('log-level=3')chrome_options.add_argument('--user-agent=""') # 设置请求头的User-Agentchrome_options.add_argument('--disable-infobars') # 禁⽤浏览器正在被⾃动化程序控制的提⽰chrome_options.add_argument('--incognito') # 隐⾝模式(⽆痕模式)chrome_options.add_argument('--hide-scrollbars') # 隐藏滚动条, 应对⼀些特殊页⾯chrome_options.add_argument('--disable-javascript') # 禁⽤javascriptchrome_options.add_argument('--blink-settings=imagesEnabled=false') # 不加载图⽚, 提升速度chrome_options.add_argument('--ignore-certificate-errors') # 禁⽤扩展插件并实现窗⼝最⼤化chrome_options.add_argument('–disable-software-rasterizer')chrome_options.add_argument('--disable-extensions')chrome_options.add_argument('--no-sandbox') #以最⾼权限运⾏chrome_options.add_argument('--disable-dev-shm-usage')调⽤⽰例ch_options = webdriver.ChromeOptions()# 不加载图⽚,加快访问速度ch_options.add_experimental_option("prefs", {"profile.mamaged_default_content_settings.images": 2})# 此步骤很重要,设置为开发者模式,防⽌被各⼤⽹站识别出来使⽤了Seleniumch_options.add_experimental_option('excludeSwitches', ['enable-automation'])# ch_options.add_experimental_option("debuggerAddress", "127.0.0.1:9999")ch_options.add_argument('--proxy--server=127.0.0.1:8080')ch_options.add_argument('--disable-infobars') # 禁⽤浏览器正在被⾃动化程序控制的提⽰ch_options.add_argument('--incognito')browser = webdriver.Chrome(options=ch_options)写点感想天冷了,注意保暖~世界和平,就这样..。
视壮RK3399LinuxSDK编译开发环境搭建

RK3399Linux SDK编译开发环境搭建一、编译开发环境搭建1.初始化开发环境本部分内容包括如何搭建用于RK LINUX开发的本地环境。
您需要在Linux或者Mac OS环境下搭建,建议使用Ubuntu64ibt开发,如Ubuntu14.0464ibt、Ubuntu16.0464ibt 等,与我司的开发环境统一,避免出现环境问题。
2.配置一个Linux开发环境本创建步骤是基于Ubuntu LTS(14.04)版本,但是大部分发行版本必须保证所需的工具可以运行。
注意:您也可以在虚拟机中搭建环境。
如果您在虚拟机中运行Linux,您需要至少2GB的RAM/swap,或者30GB以上的磁盘空间来创建编译环境。
在Ubuntu或者MacOS下,通常您需要安装如下工具:A.Python2.6-- 2.7,您可以从下载.B.GNU Make3.81--3.82,您可以从下载.C.Git1.7or newer.您可以从下载.3.安装所需的安装包(基于Ubuntu14.04)您需要一个64位版本的Ubuntu。
注意:使用老版本Ubuntu可能会有兼容性问题。
用下面命令来安装Ubuntu所需的包:$sudo apt-get install git gnupg flex bison gperf build-essential\zip tar curl libc6-dev libncurses5-dev:i386x11proto-core-dev\libx11-dev:i386libreadline6-dev:i386libgl1-mesa-glx:i386\libgl1-mesa-dev g++-multilib mingw32cmake tofrodos\python-markdown libxml2-utils xsltproc zlib1g-dev:i386lzop$sudo ln-s/usr/lib/i386-linux-gnu/mesa/libGL.so.1/usr/lib/i386-linux-gnu/libGL.so4.安装ARM交叉编译工具链和编译内核相关软件包:$sudo apt-get install gcc-arm-linux-gnueabihf\gcc-aarch64-linux-gnu device-tree-compiler lzop libncurses5-dev\ libssl1.0.0libssl-dev二、编译1、uboot编译cd u-boot&&make rk3399_linux_defconfig&&make ARCHV=aarch64-j12&&cd..2、kernel编译cd kernel&&make ARCH=arm64rockchip_defconfig&&make ARCH=arm64rk3399-videostrong-board-mipi.img-j12&&cd..注意:rk3399-videostrong-board-edp.dts文件是配置EDP LCD文件,rk3399-videostrong-board-dulelcd.dts是双屏配置显示的文件,接口是edp and mipi3、rootfs系统及app编译cd buildroot&&make rockchip_rk3399_defconfig&&cd..&&./build_all.sh-j12&&./mkfirmware.sh4、最终固件在rockimg目录下备注:1、交叉编译环境搭建:交叉编译工具位于buildroot/output/host/usr/目录下,需要将工具的bin/目录和arm-rockchip-linux-gnueabihf/bin/目录设为环境变量。
Linux下C开发环境的搭建过程---gcc、glibc安装和升级操作方法

Linux下C开发环境的搭建过程---gcc、glibc安装和升级操作⽅法Linux下C开发环境的搭建过程——安装gcc前⾔在Linux系统中,软件安装程序⽐较纷繁复杂,不过最常见的有两种:1)⼀种是软件的源代码,您需要⾃⼰动⼿编译它。
这种软件安装包通常是⽤gzip压缩过的tar包(后缀为.tar.gz)。
2)另⼀种是软件的可执⾏程序,你只要安装它就可以了。
这种软件安装包通常被是⼀个RPM包(Redhat Linux Packet Manager,就是Redhat的包管理器),后缀是.rpm。
Linux和C天⽣就有不解之缘,Linux操作系统的内核主要就是⽤C写的,另外Linux下的很多软件也是⽤C写的,特别是⼀些著名的服务软件,⽐如MySQL、Apache等。
初学者在编译MySQL这样的软件时,可能遇到过各式各样的错误,其实只要你初步了解了Linux的C开发环境,你就能⾃⾏解决这些错误。
Linux的C开发环境与Windows的有所不同,在Linux下,⼀个完整的C开发环境由以下三个部分组成:1、函数库:glibc要构架⼀个完整的C开发环境,Glibc是必不可少的,它是Linux下C的主要函数库。
Glibc有两种安装⽅式:A、安装成测试⽤的函数库——在编译程序时⽤不同的选项来试⽤新的函数库B、安装成主要的C函数库——所有新编译程序均⽤的函数库Glibc含⼏个附加包:LinuxThreads、locale和crypt,通常它们的⽂件名随版本不同⽽类似于下列⽂件名:glibc-2.06.tar.gzglibc-linuxthreads-2.0.6.tar.gzglibc-localedate-2.0.6.tar.gzglibc-crypt-2.0.6.tar.gz2、编译器:gccgcc(GNU CCompiler)是GNU推出的功能强⼤、性能优越的多平台编译器,gcc编译器能将C、C++语⾔源程序、汇编程序和⽬标程序编译、连接成可执⾏⽂件,以下是gcc⽀持编译的⼀些源⽂件的后缀及其解释:3、系统头⽂件:glibc_header缺少了系统头⽂件的话,很多⽤到系统功能的C程序将⽆法编译。
正点linux开发板SSH-Server环境搭建

基于正点原子Alpha Linux 开发板ssh服务器搭建,以及IP地址静态设置。
写本文目的,方便以后能回顾下,也希望有需要的能借鉴下,写的不是很好,有不懂得地方可以留言.首先楼主在正点原子开发板自带Linux系统上经过多次尝试,搭建ssh服务器,以及静态IP地址的设置,最终还是失败告终,最终在一位热心的网友帮助下,成功搭建ssh服务器,IP地址的固定设置,废话多说,下面看搭建步骤:第一步:烧写镜像到我们的开发板中(镜像是正点提供的)具体怎么下镜像到开发板中这里不在赘述,正点官方给详细的步骤,镜像,驱动开始指南网盘可自提。
链接:https:///s/1vMbw5J0xKlrgh4ZlxbBjZw提取码:sdnp烧写步骤我们只需要看I.MX6U 嵌入式Linux驱动开发指南V1.0 第三十九章系统烧写第二步:网盘下载烧写工具,里面自带linux开发板系统镜像,因楼主开发板是emmc 版本,所以选择如下方框所示:根据自己开发板自行选择,具体每个什么意义,可在系统烧写章节有介绍,这里不在介绍第三步:系统烧写完成以后,我们还不能通过网络(必须是局域网),进行访问开发板首先查看我们电脑连接路由器的IP地址,路由器IP地址,静态配置开发地址的IP地址,必须处在同一个网段,否则后面无法进行访问,设置开发板的IP地址,通过串口,进行访问开发板(方法可参考I.MX6U 嵌入式Linux驱动开发指南V1.0)进入目录/etc/network vi interfaces 并完成如下配置IP地址根据自己的IP进行修改保存退出,reboot,重下或者 /etc/init,d/networking restartifconfig 查看下,自己的IP地址就是刚才配置的了,这里配置了网口2。
配置好以后即可通过网线连接开发板网口2与路由器连接第四步:ping 下电脑ping 就能ping 通了,但仍然无法通过有线网络,或者无线访问我们的开发板串口终端输入 sudo apt-get install openssh-server 安装ssh serversudo ps -e |grep ssh #查看是否安装成功好了,下面尝试连接我们的开发板......这是可以通过putty 工具,来尝试访问下,我们的开发板,可能会出现如下报错不要着急,有两种方法可以解决,创建用户组,或者修改ssh配置修改配置如下好了,下面我们就可以通过ssh 来控制我们的开发板了,同一网段,无线有线均可访问。
linux下使用vscode搭建C++开发环境

linux下使⽤vscode搭建C++开发环境最近在linux上跑⼀些开源库做学习⽤, 顺⼿就搭了⼀下vscode的c++开发环境, 这⾥分享⼀下vscode进⾏C++开发的基本环境结构.1. ⾸先是编辑器, vscode直接官⽹下载的, 后期可以⽤ apt 直接更新, 个⼈觉得还是挺⽅便的, 有喜欢折腾的⼩伙伴可以去github上拉开源版本的下来⾃⼰编译, 这⾥不过多赘述2. 其次是编译器, 我使⽤的是GNU编译器g++, ⽣成脚本我选择了makefile以上是基础⼯具, 如果把vscode换成vim + shell脚本, 调试直接gdb的话, 就基本上是原⽣环境开发了接下来就是开发环境的搭建了, 这⾥我先整理⼀下⼀个⼯程量稍微⼤⼀些的项⽬所应该包含的项⽬种类, 再根据整理的结果给出⼀个我写的例⼦, 之后再对该例进⾏不断完善对于⼀个⼤型⼯程来说, 可能⾄少会包含以下⼏种不同的⼯程:1. 可执⾏程序 : 即项⽬主要的⽬标2. 静态库 : 集成⼀些基础的⼯具函数和⼀些基础功能的封装3. 动态库 : 作为插件, ⾮核⼼功能之类的东西4. 资源⽂件 : 各种图⽚, ⽂件, ⾳频, xml等等以上是我认为的⼀个⼯程量稍⼤的程序可能会包含的项⽬种类, 根据上⾯这四类, 我构建了如下的⽂件结构 :.├── debug├── lib├── project│├── debug.makefile│├── exe_test││├── compile││├── .d││├── header│││└── test.h││├── makefile││└── src││└── test.cpp│├── lib_a││├── compile││├── .d││├── header│││├── a_1st.h│││├── a_2nd.h│││└── a_3rd.h││├── makefile││└── src││├── a_1st.cpp││├── a_2nd.cpp││└── a_3rd.cpp│├── lib_so││├── compile││├── .d││├── header│││├── so_1st.h│││├── so_2nd.h│││└── so_3rd.h││├── makefile││└── src││├── so_1st.cpp││├── so_2nd.cpp││└── so_3rd.cpp│└── makefile├── release└── .vscode├── c_cpp_properties.json├── launch.json├── settings.json└── tasks.json20 directories, 23 files在当前项⽬⽬录下共有4个⼦⽬录和⼀个vscode专⽤的隐藏⽬录 :1. debug : 所有我们⽣成的debug版本的可执⾏程序以及debug版本程序所需的资源都会⽣成在这个⽬录中2. release : 同上, 但可执⾏程序和资源⽂件都是release版的3. lib : 所有动态库, 静态库会⽣成在这个⽬录中, debug版和release版⽤⽂件名结尾是否带 D 来区分4. project : 所有当前项⽬相关的⼯程都在这个⽬录中5. .vscode : vscode专⽤⽬录, 其中包含了当前项⽬相关的vscode配置信息下⾯再看⼀下project⽬录, 该⽬录下共有3个项⽬⽬录和两个makefile :1. lib_a : 该项⽬最终会⽣成⼀个静态库供程序使⽤2. lib_so : 该项⽬最终会⽣成⼀个动态库供程序使⽤3. exe_test : 该项⽬最终会⽣成⼀个可执⾏程序, 该程序会使⽤到上述静态库和动态库4. 两个makefile⽤于控制所有项⽬的debug版, release版⽣成最后再解析⼀下每⼀个项⽬⽬录, 每个项⽬都包含了4个⼦⽬录和⼀个makefile :1. src : 所有的源⽂件放置在该⽬录中2. header : 所有的头⽂件放置在该⽬录中3. compile : 编译后的.o⽂件会在这个⽬录中⽣成4. .d : 该⽬录⽤于存放每个源⽂件的依赖关系5. makefile : 该makefile控制当前项⽬的⽣成以上是例⼦⽂件结构的⼤概说明, 下⾯我们就这个例⼦进⾏完善, 针对每⼀个⼯程和整个项⽬, 编写makefile, 完成代码的编译⽣成⾸先针对整个项⽬, 我们要⽣成每⼀个⼯程, 并保证⼯程的⽣成顺序符合每个⼯程间的依赖关系这⾥先看⼀下project/makefile, 这个makefile⽤于⽣成所有⼯程release版本1 export BUILD_VER := RELEASE2 export CXXFLAGS := -Wall -std=c++113 export RM := rm -f45 .PHONY:build_all clean_all clean_all_cache67 build_all:8 cd ./lib_so && make9 cd ./lib_a && make10 cd ./exe_test && make1112 clean_all:13 cd ./lib_so && make clean14 cd ./lib_a && make clean15 cd ./exe_test && make clean1617 clean_all_cache:18 cd ./lib_so && make clean_cache19 cd ./lib_a && make clean_cache20 cd ./exe_test && make clean_cache该makefile⾸先会覆写3个变量, 并将变量导出成为全局变量, 其中BUILD_VER⽤于控制⽣成程序的版本, 紧随其后的是3个伪⽬标, 分别⽤于⽣成每个⼯程, 清理所有⽣成⽂件以及清理⽣成过程中的产⽣的.o和.d接下来再来看project/debug.makefile, 这个makefile⽤于⽣成所有⼯程的debug版本1 include ./makefile23 BUILD_VER := DEBUG该makefile引⼊release版的makefile, 并修改BUILD_VER为DEBUG, 该makefile名称不是make能够⾃动识别的名称, 使⽤需要加上 -f 参数,如 : make -f debug.makefile通过上⾯两个makefile, 我们基本完成了对代码⽣成的版本控制和整个项⽬的⽣成流程, 下⾯只需要针对每⼀个⼯程, 编写对应的makefile即可下⾯是3个⼯程的makefile :⾸先是静态库⼯程lib_a1 vpath %.cpp ./src2 vpath %.h ./header34 .PHONY: all clean clean_cache5 all : # 默认⽬标67 CXXINCLUDES = -I ./header8 ARFLAGS = -rcs9 SRCS_WITH_PATH = $(wildcard ./src/*.cpp)10 SRCS = $(SRCS_WITH_PATH:./src/%.cpp=%.cpp)11 DEPS = $(SRCS:.cpp=.d)12 DEPS_WITH_PATH = $(SRCS:%.cpp=./.d/%.d)13 OBJS = $(SRCS:.cpp=.o)14 OBJS_WITH_PATH = $(SRCS:%.cpp=./compile/%.o)15 TARGET_NAME = tsi.a16 OUTDIR = ../../lib/1718 ifeq ($(BUILD_VER), DEBUG)19 CXXFLAGS += -g320 TARGET_NAME := tsiD.a21 endif2223 ifeq ($(BUILD_VER), RELEASE)24 CXXFLAGS += -O225 endif2627 #⽣成依赖关系,保证修改.h时也会重新编译相关.cpp28 -include $(DEPS)2930 %.d:$(SRCS)31 @set -e;\32 $(RM) $@;\33 $(CXX) $(CXXINCLUDES) -MM $< > .d/$@;3435 %.o:%.cpp36 $(CXX) $(CXXFLAGS) $(CXXINCLUDES) -c $< -o ./compile/$@3738all:$(TARGET_NAME)3940 $(TARGET_NAME):$(OBJS)41 $(AR) $(ARFLAGS) $(OUTDIR)$(TARGET_NAME) $(OBJS_WITH_PATH)4243clean:44 $(RM) $(OUTDIR)$(TARGET_NAME) $(OBJS_WITH_PATH) $(DEPS_WITH_PATH)4546clean_cache:47 $(RM) $(OBJS_WITH_PATH) $(DEPS_WITH_PATH)makefile中⾸先读取了当前⼯程下的两个⽬录, 保证正确搜索.h和.cpp之后声明三个伪⽬标, 并以all为终极⽬标, 之后声明了⼀系列变量, 这⾥详细解释⼀下每⼀个变量, 跟⼤家解释⼀下我的思路CXXINCLUDES : 该变量包含了⽣成时c++的包含⽬录ARFLAGS : 静态库打包标志SRCS_WITH_PATH : 包含路径的所有源⽂件, 该写法可以⾃动匹配指定⽬录下的所有.cpp, ⼤型⼯程中可能会有很多源⽂件, 每次更新删除都要修改makefile的话会很不⽅便SRCS : 剔除所有源⽂件的前缀路径DEPS : 对每⼀个源⽂件, ⽣成⼀个对应的写有依赖关系的.d⽂件DEPS_WITH_PATH : 包含前缀路径的全部.d⽂件OBJS : 源⽂件编译⽣成的全部.o⽂件OBJS_WITH_PATH : 包含前缀路径的全部.o⽂件TARGET_NAME : ⽣成⽬标的名称OUTDIR : 输出⽬录在声明了以上这些变量之后, 通过对全局变量BUILD_VER的值的判断, 在CXXFLAGS⾥添加不同的参数以控制版本, 并对⽂件名等信息做修改接下来我⽤-include让当前makefile读取所有.d依赖关系, 当前⽂件由于没有找到这些.d⽂件, 会在⽂件中搜索有⽆⽣成的静态⽬标, 这时, make会搜索到下⽅的%.d:$(SRCS)根据该静态⽬标, .d⽂件便会被⽣成出来并被加载假设我们当前指明⽣成的是伪⽬标allall所依赖的⽬标是我们指定的⽂件名$(TARGET_NAME), 该变量所指向的⽬标⼜依赖于所有的.o⽂件, 由于.o⽂件没有被⽣成, make⼜会搜索并调⽤静态⽬标%.o:%.cpp进⾏.o⽂件的⽣成在⽣成完所有的.o⽂件之后, ⽬标$(TARGET_NAME)才会被执⾏, 最终在../../lib⽬录中⽣成tsi.a或tsiD.a理解了上⾯的内容之后, 接下来两个⼯程 : 动态库以及可执⾏⽂件的makefile基本也可以套⽤上⾯的内容再进⾏修改得到, 这⾥我贴出我的写法供⼤家参考动态库makefile1 vpath %.cpp ./src2 vpath %.h ./header34 .PHONY: all clean clean_cache5 all : # 默认⽬标67 CXXFLAGS += -fPIC8 CXXINCLUDES = -I ./header9 SRCS_WITH_PATH = $(wildcard ./src/*.cpp)10 SRCS = $(SRCS_WITH_PATH:./src/%.cpp=%.cpp)11 DEPS = $(SRCS:.cpp=.d)12 DEPS_WITH_PATH = $(SRCS:%.cpp=./.d/%.d)13 OBJS = $(SRCS:.cpp=.o)14 OBJS_WITH_PATH = $(SRCS:%.cpp=./compile/%.o)15 TARGET_NAME = libtest.so16 OUTDIR = ../../lib/1718 ifeq ($(BUILD_VER), DEBUG)19 CXXFLAGS += -g320 TARGET_NAME := libtestD.so21 endif2223 ifeq ($(BUILD_VER), RELEASE)24 CXXFLAGS += -O225 endif2627 #⽣成依赖关系,保证修改.h时也会重新编译相关.cpp28 -include $(DEPS)2930 %.d:$(SRCS)31 @set -e;\32 $(RM) $@;\33 $(CXX) $(CXXINCLUDES) -MM $< > .d/$@;3435 %.o:%.cpp36 $(CXX) $(CXXFLAGS) $(CXXINCLUDES) -c $< -o ./compile/$@3738all:$(TARGET_NAME)3940 $(TARGET_NAME):$(OBJS)41 $(CXX) -shared -o $(OUTDIR)$(TARGET_NAME) $(OBJS_WITH_PATH)4243clean:44 $(RM) $(OUTDIR)$(TARGET_NAME) $(OBJS_WITH_PATH) $(DEPS_WITH_PATH)4546clean_cache:47 $(RM) $(OBJS_WITH_PATH) $(DEPS_WITH_PATH)可执⾏程序makefile1 vpath %.cpp ./src2 vpath %.h ./header34 .PHONY: all clean clean_cache5 all : # 默认⽬标67 CXXINCLUDES = -I ./header -I ../lib_a/header -I ../lib_so/header8 SRCS_WITH_PATH = $(wildcard ./src/*.cpp)9 SRCS = $(SRCS_WITH_PATH:./src/%.cpp=%.cpp)10 DEPS = $(SRCS:.cpp=.d)11 DEPS_WITH_PATH = $(SRCS:%.cpp=./.d/%.d)12 OBJS = $(SRCS:.cpp=.o)13 OBJS_WITH_PATH = $(SRCS:%.cpp=./compile/%.o)14 LINK_LIB = ../../lib/tsi.a15 LINK_USR_SO = -L ../../lib -Wl,-rpath=../lib -ltest16 TARGET_NAME = test17 OUTDIR = ../../release/1819 ifeq ($(BUILD_VER), DEBUG)20 CXXFLAGS += -g321 LINK_LIB := ../../lib/tsiD.a22 LINK_USR_SO := -L ../../lib -Wl,-rpath=../lib -ltestD23 TARGET_NAME := testD24 OUTDIR := ../../debug/25 endif2627 ifeq ($(BUILD_VER), RELEASE)28 CXXFLAGS += -O229 endif3031 #⽣成依赖关系,保证修改.h时也会重新编译相关.cpp32 -include $(DEPS)3334 %.d:$(SRCS)35 @set -e;\36 $(RM) $@;\37 $(CXX) $(CXXINCLUDES) -MM $< > .d/$@;3839 %.o:%.cpp40 $(CXX) $(CXXFLAGS) $(CXXINCLUDES) -c $< -o ./compile/$@4142all:$(TARGET_NAME)4344 $(TARGET_NAME):$(OBJS)45 $(CXX) -o $(OUTDIR)$(TARGET_NAME) $(OBJS_WITH_PATH) $(LINK_LIB) $(LINK_USR_SO)4647clean:48 $(RM) $(OUTDIR)$(TARGET_NAME) $(OBJS_WITH_PATH) $(DEPS_WITH_PATH)4950clean_cache:51 $(RM) $(OBJS_WITH_PATH) $(DEPS_WITH_PATH)这⾥有⼏点需要注意的是, 在可执⾏程序链接时, 我⽤-Wl,-rpath指定了程序执⾏时回去何处寻找libtest.so这个动态库, 如果不想这样写, 需要指定动态库⽣成到系统默认加载的路径中去, ⽐如/usr/lib, 同样程序在其他机器上部署时也需要做同样的操作另外就是关于.d依赖⽣成我使⽤的参数是-MM, 因为GNU编译器如果使⽤-M参数会⾃动加⼊⼀些其它的依赖关系, 具体内容可以⽤g++ -M xxx.cpp做简单验证, 如下图:-MM:-M(后⾯还有....):在完成了上述步骤之后, 我们的项⽬其实已经可以正常编译⽣成执⾏了, 只是跟vscode没什么联系, 这⾥我们先在project⽬录中运⾏make, make clean_all, make, make clean_all_cache来看⼀下⾟苦编写makefile的成果很成功, 舒服了接下来, 为了做到⼀键运⾏(F5)或者⼀键debug调试, 我们要对vscode进⾏项⽬配置, 这⾥我们要修改.vscode⽬录下的三个⽂件:launch.json task.json c_cpp_properties.json在此之前先贴⼀下我在vscode中安装的插件, 这些插件能让开发环境更美观, 代码编写更顺畅其中C/C++提供了只能⾼亮头⽂件查找等功能, Chinese是⼀些选项的汉化, Font Switcher可以快速更换字体(这个⽆所谓...), One Dark Pro是⼀款⽐较美观的主题配⾊, Python(个⼈需求, 写⼀些简单的脚本还是很⽅便的), TabOut可以针对各种括号按tab快速跳出, vscode-icons美化各种图标下⾯到了vscode的启动配置, 在vscode的运⾏选项卡中, 我们可以选择当前项⽬启动的配置, 该配置集由launch.json来控制, 这⾥我先贴出我的launch.json, 再进⾏详细说明1 {2 "configurations": [3 {4 "name": "run release",5 "type": "cppdbg",6 "request": "launch",7 "program": "${workspaceFolder}/release/test",8 "args": ["-r", "-debug"],9 "stopAtEntry": false,10 "cwd": "${workspaceFolder}/release",11 "environment": [],12 "externalConsole": false,13 "MIMode": "gdb",14 "setupCommands": [15 {16 "description": "为 gdb 启⽤整齐打印",17 "text": "-enable-pretty-printing",18 "ignoreFailures": true19 }20 ],21 "preLaunchTask": "make release"22 },23 {24 "name": "run debug",25 "type": "cppdbg",26 "request": "launch",27 "program": "${workspaceFolder}/debug/testD",28 "args": ["-r", "-debug"],29 "stopAtEntry": true,30 "cwd": "${workspaceFolder}/debug",31 "environment": [],32 "externalConsole": false,33 "MIMode": "gdb",34 "setupCommands": [35 {36 "description": "为 gdb 启⽤整齐打印",37 "text": "-enable-pretty-printing",38 "ignoreFailures": true39 }40 ],41 "preLaunchTask": "make debug"42 }43 ]44}这⾥我配置了两个启动选项, ⼀个直接运⾏release程序, 另⼀个运⾏debug程序, 这⾥针对debug启动项进⾏解释说明name : 我们在启动选项卡⾥看到的启动项名称type : cppdbg就可以, 具体可以查阅vscode官⽅说明request : 启动项类型, ⼀种是附加程序⼀种是直接启动, 这⾥是直接启动program : 启动程序路径, 在vscode⾥打开的根⽬录即为${workspaceFolder}, 后⾯加上release路径args : 传⼊程序的参数stopAtEntry : 程序是否⾃动在⼊⼝暂停, debug版才有⽤哦cwd : 程序运⾏时的⽬录environment :要添加到程序环境中的环境变量, 具体可以查阅vscode官⽅说明, 这⾥我直接没填externalConsole : 选择程序是在新的控制台中启动还是在集成控制台启动MIMode : 调试器选择setupCommands : vscode官⽅⽂档查, 这⾥我是直接⽤默认配置的preLaunchTask : 这个是最重要的选项了, 该选项指明了在运⾏当前选项卡之前要运⾏的task任务, 这个task任务配置在同⽬录下的tasks.json 中, 这⾥填的内容是task的label为了解释preLaunchTask这个选项, 我们引⼊tasks.json, 这⾥贴出我的tasks.json, 进⾏说明1 {2 "version": "2.0.0",3 "tasks": [4 {5 "type": "shell",6 "label": "make release",7 "command": "make",8 "args": [],9 "options": {10 "cwd": "${workspaceFolder}/project"11 },12 "group": "build"13 },14 {15 "type": "shell",16 "label": "make debug",17 "command": "make -f debug.makefile",18 "args": [],19 "options": {20 "cwd": "${workspaceFolder}/project"21 },22 "group": "build"23 },24 {25 "type": "shell",26 "label": "make clean",27 "command": "make",28 "args": ["clean_all"],29 "options": {30 "cwd": "${workspaceFolder}/project"31 },32 "group": "build"33 },34 {35 "type": "shell",36 "label": "make clean debug",37 "command": "make -f debug.makefile",38 "args": ["clean_all"],39 "options": {40 "cwd": "${workspaceFolder}/project"41 },42 "group": "build"43 },44 {45 "type": "shell",46 "label": "make clean cache",47 "command": "make",48 "args": ["clean_all_cache"],49 "options": {50 "cwd": "${workspaceFolder}/project"51 },52 "group": "build"53 }54 ]55}在这个⽂件中我配置了5个task, 其中前2个task : make release 和 make debug⽤于执⾏不同的makefile这⾥我针对make debug做个简单说明type : task的类型, 这⾥填shell相当于执⾏shell命令label : task的名字command : 要执⾏的指令, 这⾥要注意 make -f xxx.file这种命令, -f xxx这个内容要直接写到命令内容中, ⽽不能写到下⾯的args⾥, 会⽆法识别, 这⾥⼤家可以⾃⾏验证⼀下args : command要附加的参数options : 其他选项cwd : task执⾏的⽬录group : task的分组, 可以查⼀下vscode官⽅说明经过以上配置, vscode就和我们的makefile联系在⼀起了, 选好启动项f5就完事了, 这⾥我贴出我的test.cpp, test.h, 和vscode断点调试运⾏截图 1 #include "test.h"23int main(int argc, char* argv[])4 {5if (argc > 0)6 {7 std::cout << "input param : ";8for (int idx = 0; idx < argc; ++idx)9 {10 std::cout << argv[idx] << "";11 }12 std::cout << std::endl;13 }1415 std::cout << std::endl << "using a" << std::endl;16 std::cout << tsi::a1st::lib_name() << std::endl17 << tsi::a2nd::lib_author() << std::endl18 << tsi::a3rd::lib_version() << std::endl;1920 std::cout << std::endl << "using so" << std::endl;21 std::cout << tsi::so1st::lib_name() << std::endl22 << tsi::so2nd::lib_author() << std::endl23 << tsi::so3rd::lib_version() << std::endl;24return0;25 }1 #ifndef _TSI_TEST_2#define _TSI_TEST_34 #include <iostream>56 #include "a_1st.h"7 #include "a_2nd.h"8 #include "a_3rd.h"9 #include "so_1st.h"10 #include "so_2nd.h"11 #include "so_3rd.h"1213#endif这样, ⼀个简单的项⽬⼯程的开发环境就搭建成功了. PS: 在调试时, 我遇到了⼀个⼩问题, 这⾥也贴⼀下这⾥⼀开始我⽆法进⾏gdb调试, 提⽰⽆法读取⽂件云云, 点击创建后, 有了上述提⽰, 在⽹上检索了⼀下, 只有解决⽅案, 没有详细解释其中机理, 这⾥我先贴出解决办法在/⽬录下建⽴build⽬录,在该⽬录中建⽴错误提⽰中对应的⽬录, 并下载提⽰对应版本glibc到⽬录中并解压即可解决问题关于该错误我认为是gdb调试加载路径错误导致, 如果有了解详细原因的朋友, 请务必留⾔指点, 在此谢过以上, 上⽅⽰例只是⼀个简单的项⽬结构, 其中⼀定还有很多不⾜之处, 本⽂仅起到⼀个抛砖引⽟的作⽤, 如有错误疏漏, 请务必指出, 有问题欢迎讨论, 转载注明出处, 感谢。
配置EDK2的Linux 开发环境

配置EDK2的Linux 开发环境1配置Linux 开发环境与配置Windows开发环境相似,配置Linux开发环境也包括如下步骤。
1)安装gcc编译器,并下载EDK2源码。
2)配置EDK2,包括编译EDK2工具链和设置编译器路径。
在配置Windows开发环境时,我们没有编译EDK2工具链,因为EDK2源码包中包含了Windows下的EDK2工具链可执行文件。
但是,由于Linux发行版众多,因此,EDK2源码包中没有包含EDK2工具链可执行文件。
然后就可以通过EDK2提供的源码和工具开发UEFI应用和驱动了。
3)编译UEFI模拟器和UEFI工程。
4)运行UEFI模拟器。
下面详细介绍配置Linux开发环境的这几个步骤。
1.1安装所需开发工具1)安装gcc:在Ubuntu下可以使用如下命令安装gcc。
1.EDK2:$apt-get install gcc2)下载EDK2开发包。
①?可以从TianoCore官方网站下载EDK2发行版:1.https:///projects/edk2/f?iles/UDK2014_Releases/UDK2014/UDK2014.Complete.MyWorkSpace.zip/download②也可以用代码管理工具获得最新源码。
3)用subversion命令行获得EDK2源码:1.EDK2:$svn co https:///p/edk2/code/trunk/edk2edk2或用git命令行下载源码:1.EDK2:$git clone https:///tianocore/edk21.2配置EDK2开发环境1)编辑Conf/target.txt。
根据用户的编译器环境修改编译工具TOOL_CHAIN_TAG。
此处以gcc 4.4为例,需设置TOOL_CHAIN_TAG=GCC44,如下图所示。
2)检查Conf\tools_def.txt(见图2-9),确保编译器路径正确。