Windows 10 Linux子系统环境下开发嵌入式 Linux程序 - 创龙小识堂 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 6345|回复: 0
打印 上一主题 下一主题

Windows 10 Linux子系统环境下开发嵌入式 Linux程序

[复制链接]

26

主题

29

帖子

158

积分

QQ游客

积分
158
跳转到指定楼层
楼主
发表于 2016-8-12 17:31:25 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
概述
微软在年初开发者大会上突然宣布在 Windows 10 年中周年更新版本会引入 Bash,一时间引起轩然大波。此举,也被视为讨好开发者的一种方式。
Linux 系统在服务器或者嵌入式等平台开发还是得到广泛使用的,以往开发人员会采取安装虚拟机(Vmware / vBox等),模拟 Shell 环境(Cgywin / MiniGW等)或者安装多系统,甚至专门部署一台 Linux 主机。
这一次,微软与 Canonical 公司(Ubuntu 母公司)合作,在 Windows 10 引入 Linux 子系统(Windows Subsystem for Linux),使得 Ubuntu Bash Shell 下 64位 ELF 格式用户模式应用程序原生可以在 Windows 10 下运行。这里需要注意的是,与虚拟机等方式存在本质上的不同。Linux 二进制文件可以不需要重新编译,直接在 Windows 10 下运行,而且调用的是 Windows NT 的系统 API。这样,不论是便捷性还是性能都会强很多。
那么究竟是怎么回事呢?要先从 Windows NT 架构说起......
Windows NT 即 Windows New Technology,最初微软于 1993 发布的面向工作站 / 服务器的高性能 32位操作系统。现在的 WindowsXP/2003/Vista/2008/7/2012/10 等操作系统都是基于 NT 架构构建。因为最初是微软和IBM 合作开发的,所以 NT 也支持 OS/2 应用程序。当然 20多年过去了 NT 架构也发生很多变化,不过一些基本结构还是类似的。
后来,随着时间推移,这些早期的子系统已经被淘汰。但是由于存在这样的框架支持,因此可以在先前资源的基础上添加 Windows Subsystem for Linux。
类似 NT 架构核心文件 Ntoskrnl.exe 和 Ntdll.dll,Linux 子系统实时将 Linux 的系统调用转换为 Windows 的系统调用,通过核心文件 LXCore.sys 和LXSS.sys。
所以,在 Windows 10Linux 子系统中并不存在 Linux 系统内核,所有系统调用(System Call)都会被转换为 NT 系统调用(System Call)。

部署
那么如何打开 Linux 子系统呢?
1、安装 Linux 子系统
控制面板>启用或关闭 Windows 功能>适用于 Linux Windows 子系统
也可以在 PowerShell 下执行 Enable-WindowsOptionalFeature -Online -FeatureNameMicrosoft-Windows-Subsystem-Linux 命令。
安装完成重启计算机
2、打开开发者模式
设置>更新和安全>针对开发人员>开发人员模式,然后重启计算机。
3、安装 Ubuntu
打开命令行提示符(管理员),输入 Bash 开始下载安装,视网络状况及速度可能需要几十分钟到几个小时。安装完成后按照提示设置 Unix 用户名和密码。
这样 Bash 环境就可以使用了,安装完成后会在用户目录下C:\Users\F\AppData\Local\lxss 创建相关文件。可以,看到跟常见的 Linux 文件系统目录结构一致。
可以通过命令查看 Linux 版本信息。
uname -a
Linux F-TABLETBOOK 3.4.0+ #1 PREEMPT ThuAug 1 17:06:05 CST 2013 x86_64 x86_64 x86_64 GNU/Linux
cat /proc/version
Linux version 3.4.0-Microsoft(Microsoft@Microsoft.com) (gcc version 4.7 (GCC) ) #1 SMP PREEMPT Wed Dec 3114:42:53 PST 2014
cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=14.04
DISTRIB_CODENAME=trusty
DISTRIB_DESCRIPTION="Ubuntu 14.04.5LTS"
sudo lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:   Ubuntu 14.04.5 LTS
Release:      14.04
Codename:    trusty
可以看到,是基于 Ubuntu 14.04 LTS 长期支持版本构建。当然,还可以通过
sudoapt-get install gcc 安装软件。


实践
现在,就以在 OMAPL138 Linux 系统编写一个简单的 hello 程序为例,介绍在 Linux 子系统下的开发。
首先需要交叉编译器,注意,只有 64位版本才能在 Linux 子系统下运行,这里使用的是arm-2013.05-24-arm-none-linux-gnueabi-x86_64-linux-gnu.tar.bz2
这里简单说下不同编译器的区别[1]
命名规则
交叉编译工具链的命名规则为:arch [-vendor] [-os] [-(gnu)eabi]
arch - 体系架构,如ARMMIPS
vendor - 工具链提供商
os - 目标操作系统
eabi - 嵌入式应用二进制接口(Embedded ApplicationBinary Interface
根据对操作系统的支持与否,ARM  GCC可分为支持和不支持操作系统,如
  arm-none-eabi:这个是没有操作系统的,自然不可能支持那些跟操作系统关系密切的函数,比如fork(2)。使用的是newlib这个专用于嵌入式系统的C库。
  arm-none-linux-eabi:用于Linux的,使用Glibc
比如,
     arm-none-eabi-gcc 用于编译 ARM 架构的裸机系统(包括 ARM Linux bootkernel,不适用编译 Linux 应用 Application)。
     arm-none-linux-gnueabi-gcc 主要用于基于 ARM 架构的 Linux 系统,可用于编译 ARM 架构的 u-bootLinux内核、Linux应用等。
     arm-eabi-gcc Android ARM 编译器。
     armcc ARM 公司推出的编译工具,功能和 arm-none-eabi 类似。
     arm-none-uclinuxeabi-gcc 用于uCLinux,使用Glibc
     arm-none-symbianelf-gcc 用于symbian
1、解压文件到任意目录,因为有 Linux 子系统支持,所以你可以将文件放到任何 Windows 下可以访问的目录。解压需要一会时间。
tar jxvf arm-2013.05-24-arm-none-linux-gnueabi-x86_64-linux-gnu.tar.bz2-C ./
2、解压完成后可以先配置下环境变量
exportPATH=$PATH:/mnt/d/Project/Linux/arm-2013.05/bin
3、然后,编写一个简单的 hello 程序。
4、交叉编译程序
arm-none-linux-gnueabi-gcchello.c -o hello
编译成功后可以查看下文件信息
filehello
hello: ELF 32-bit LSB  executable, ARM, EABI5 version 1 (SYSV),dynamically linked (uses shared libs), for GNU/Linux 2.6.16, not stripped
可以看到这个文件是32 ELF 格式小端字节序 ARM 平台使用动态链接库的可执行文件。
5、上传程序到开发板文件系统并执行,可以使用 Bash 命令行方式也可以直接使用第三方工具比如 SecureCRT 和 SecureFX。这里以命令行方式为例。
n  使用 SFTP 协议登录开发板,192.168.1.35 是开发板 IP 地址。
sftproot@192.168.1.35
n  上传程序到 /home/root
sftp>puthello /home/root
n  退出 SFTP
sftp>exit
n  使用 SSH 协议连接开发板
ssh-l root 192.168.1.35
n  更改权限
root@tl:~#chmod +x hello
n  执行程序
root@tl:~#./hello
Hello world!


运行图形界面程序
虽然,微软的出发点是想让开发者执行 Bash 命令行程序,但实际上 GUI 图形界面程序也可以执行,外国论坛上的大神都完整的安装了 unity、xfce以及 deepin 等。
如果,想要运行 GUI 程序,首先需要安装 X Server 服务器,可以使用 Xming 或 VcXsrv 之类的软件,安装完成后运行 XLaunch 简单配置下即可。
看起来是不是跟 Windows 10 主题也没有违和感呢?


附录 参考资料





分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|嵌入式开发者社区 ( 粤ICP备15055271号

GMT+8, 2024-4-20 12:36 , Processed in 0.051547 second(s), 31 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

快速回复 返回顶部 返回列表