在CM311移动热点上运行.NET应用程序(mono)

作者:V君 发布于:2018-7-25 19:06 Wednesday 分类:折腾手记

TL;DR 

去软件仓库 (这里) 找主程序和托管核心类库

比如 mono-runtime-sgen_4.8.0.520-0xamarin3_armel.deb

 和 libmono-corlib4.5-cil_4.8.0.520-0xamarin3_all.deb

下载下来用7-zip提取主体

主程序随便放, 把托管库放到 /usr/lib/mono/4.5/ 或目录符号连接到任意地方

赋予执行权限, 即可执行[./mono-sgen ConsoleApp1.exe]. 按提示找缺少的托管库.


需要注意的是CM311跑不了5.x版本以上的mono, 提示libc6丢失. 

要补上估计不容易, 而且存储空间可能也不允许

 

今天没时间扯了,下次有空再扯

标签: C# linux 嵌入式 mono

评论(0) 引用(0) 浏览(132)

在CM311移动热点上将telnet服务设为自启动

作者:V君 发布于:2018-7-25 14:53 Wednesday 分类:折腾手记

TL;DR

1)先通过TTL控制台做实验, 执行[telnetd -b 0.0.0.0]然后从USB或WIFI尝试连接.

2)第个一步骤成功之后找到 /etc/init.d/rcS 用 vi 编辑

 在最后一行前加上启动 telnetd 的命令[/sbin/telnetd -b 0.0.0.0]

3)拿掉TTL,合上盖子,重启. 在PC上用PuTTY之类的终端连上去.


听我扯扯:

在TTL控制台终端操作实在是太折磨人,命令行打到一半总会被输出打断.

就找法子让终端可以走通过C/S方式连上.

最开始的时候凭经验用rc.local,然并卵, 可能是嵌入式linux的缘故

rc.local不工作, 咕狗解决方法顺着线索找到 rc?.d 问号是表示运行级别的数字

选了级别3,在里面创建了脚本, 然而也不管用.


最后用busybox telnetd作为关键字总算找到了 rcS 成功实现自启动.

接下来可以定一个小目标比如让mono进来 乂目


看来咱对linux的了解依然是冰山一角的一角,连rc.local和rcS都搞不清楚 _(:з」∠)_

嘛! 反正能捣腾起来就好 (´∀((☆ミつ

 

标签: linux 嵌入式 busybox telnet

评论(0) 引用(0) 浏览(107)

在CM311移动热点上使用TTL控制台取得ROOT

作者:V君 发布于:2018-7-24 19:33 Tuesday 分类:折腾手记

TL;DR:

点击查看原图

准备材料:

 CM311移动热点一只

 2毫米十字螺丝刀一个

 2.54测试夹一个以及杜邦线

 CP2102 USB-TTL转换器一个

步骤:

 取下螺丝,撬开两边的盖子

 用测试夹怼上测试点

 接到USB-TTL适配器

 开PuTTY, 设置波特率115200

 用户名root,密码oelinux123.

PS.

 需要装着电池才能开机

 

 

听我扯扯:

其实在几天前就找到ROOT了,无奈手上的PL和CH芯片的USB-TTL转换器似乎和这货不太兼容

体现在输出参杂乱码, 就咕狗了一圈发现还有一家叫CP, 马云到手之后发现效果还不错!


还是扯一扯取得密码的过程吧, 在启动之后TTL输出的不仅只有Linux引导产生的dmesg内容,

还有一大堆看起来像是没有在release版里移除的日志,非常混淆视听. 细心观察还是发现了

xxxx login: 的输出, 键盘输入也听使唤,多倒腾几下就得到了以下信息:

OpenEmbedded Linux 9615-cdp ttyHSL0

msm 20140416 9615-cdp ttyHSL0

9615-cdp login:

9615-cdp作为关键字喂狗,想找root的密码 , 咕狗首先吐出的是 zte9x15,

这货难道是中兴产的? 然而密码并不对, 接着用OpenEmbedded来作为关键字

总算找到了这么一个密码 oelinux123 ,登录成功, ROOT拿到了.

对于连默认密码都不改的情况, 让咱想起了用DEMO出产品的情节

嘛, TTL藏在肚子里, 拆螺丝失去保修, 还得用测试夹来接通, 一般用户也不会这么折腾吧...

但咱就是偏偏看他不爽要试着整整看.


最初把这玩意连到电脑上之后, 见到任务栏弹出Linux-USB Gadget就知道这货是Linux了

之后又进一步用NMAP试着找找看有没有ssh或者telnet, 很遗憾没有扫出来.

接着就到这样了, 心一横拆开看看, 发现里面有TX/RX测试触点,

然后经历了乱码充斥的找密码过程, 嗯嗯 接下来看看怎么把SSH或telnet装上.

然后再看看能不能用这个家伙跑Socks5以及试着调整参数看看能不能用电信4G.

标签: linux 控制台 嵌入式 串口 TTL

评论(0) 引用(0) 浏览(110)

活久见:有些异常是不能被catch(Exception)捕获的,你得把catch参数去掉

作者:V君 发布于:2017-6-14 0:25 Wednesday 分类:折腾手记

TL;DR: 

当你发现本应被捕获的异常却被无视 try-catch 语句时,

你应该试着去掉 catch(Exception ex) 中高亮的部分

写成 try {....} catch{....} 这种写法将不能直接取得异常实例,

你可以将上下文对象值记录下来作为排查线索。


本例:

将 MVC 5.2.3 站点部署到装了 mono 4.2.2 的Debian@树莓派。

首先就遇到一大堆兼容性问题。去掉一系列不兼容的组件。

(ApplicationInsights系列、CodeDom系列

总算能报出些看起来有点线索的异常。

System.Reflection.ReflectionTypeLoadException: The classes in the module cannot be loaded.
  at (wrapper managed-to-native) System.Reflection.Assembly:GetTypes (System.Reflection.Assembly,bool)
  at System.Reflection.Assembly.GetTypes () <0x721db540 + 0x00023> in <filename unknown>:0 
  at Ease.Ioc.IocManager.RegisterInterface (System.Reflection.Assembly[] assemblies, System.Type iface,
System.Func`1 lifetimeManager) <0x721db0c0 + 0x000fb> in <filename unknown>:0 
  at Ease.Ioc.IocManager..ctor () <0x721fb130 + 0x00283> in <filename unknown>:0 
  at Ease.Ioc.IocManager..cctor () <0x721faff8 + 0x00027> in <filename unknown>:0 

这是模仿 ABP 在当前应用域中的所有程序集中寻找实现了指定接口的类,然后加到 IoC 容器。

(哎……谁让 ABP 还不支持 mono 呢。。。)

在对某个程序集调用 GetType 时爆炸了……

于是在其周围加上常规异常处理 try-catch(Exception) 试图找出有问题的程序集。

然而异常依旧引发,就跟没写 try-catch(Exception) 一样……

试着调整方法结构,避免一些在首次访问方法就引发异常的状况 —— 无果……

心一横,去掉 catch 语句的参数,记下当前调用 GetTypes 的程序集。

try
{
types.AddRange(asm.GetTypes().Where(p => false == p.IsAbstract && false == p.IsInterface && iface.IsAssignableFrom(p)));
}
catch
{
throw new Exception("Asm load fail?" + asm);
}

功夫不负有心人 or 瞎猫撞上死耗子? bingo! 抓到你啦!

Asm load fail?System.Web.Helpers, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35

咋办? 没办法哇! 试着把引用干掉看看吧…… 果然就没事儿了!

稍稍去了解一下那玩意儿,发现是一堆辅助类, 反正一时半会也用不上。


于是就这样,用作类似 Hello world 的站点首页就成功呈现出来啦!

 —— 尽管是乱码…… 因为偷懒直接输出 Content 嘛! 接下来可以慢慢折腾啦!

标签: 软件开发 树莓派 C# linux mono 运行时错误

评论(0) 引用(0) 浏览(519)

从源代码编译mono, 嵌入mono初体验

作者:V君 发布于:2016-11-29 23:19 Tuesday 分类:折腾手记

前些天定下的小目标还是纯属扯蛋, 还是先在健全的平台从编译运行调试开始练手吧.


TL;DR

本来想在Windows环境下编译, 但变着花样重试N多次仍未成功

才注意到官方git上的 Windows:build unstable

这下只能在Linux下完整编译, 然后回到windows单独编译可执行文件了

以前有在树莓派上编译ARMHF非常顺利的经历, 

这次也圆润的通过了完整编译, 除了网络状况有点糟糕 (断开重试数次) :) 

 

详细步骤:

阶段1 -- 获取源码并于Linux编译托管库

参照文档 http://www.mono-project.com/docs/compiling-mono/linux/

安装编译所需软件包

执行以下为我神奇国度做修改的脚本


mkdir mono

cd mono

git init

# 按需做以下科学配置, 否则只有10KB每秒, 一旦断开又得重头开始

# git config http.proxy "type://x.x.x.x:xxxx"

# git config https.proxy "type://x.x.x.x:xxxx"

# git config core.gitproxy "connector"

# core 配置需要指定连接适配才能工作

# 该步骤可能会被中断多次, 需要手动重试

git fetch --depth=1 https://github.com/mono/mono.git

# 得到输出 * branch HEAD -> FETCH_HEAD 才算结束

git checkout FETCH_HEAD

# 下面两个命令会从git拉取子模块, 被中断则需要重试

git submodule update --init --recursive

make get-monolite-latest

# 获取完源代码之后开始自动配置吧

./autogen.sh

# make可以指定并发数量, 按机器的处理能力改变j参数

make -j6



阶段2 -- 编译windows可执行文件

将文件打包带回Windows

参照以下文档做编译 -- 也就是载入解决方案, 选择x64目标, F6, 其中libtest编译失败不管

http://www.mono-project.com/docs/compiling-mono/windows/#build-mono-64-bit-using-visual-studio



阶段3 -- 调试

到这一步终于可以开始调试啦!

定位到解决方案文件夹EmbeddedSamples中

新增一个(4.5)控制台应用程序,叫做teste-csharp, 删掉默认的Program.cs和App.config

以链接的方式添加在编译目录samples\embedtest.cs文件, 编译它


最后在启动之前需要把核心托管库mscorlib.dll放到相应位置

它在 mcs\class\lib\net_4_x 我们已经在Linux上编译好了

复制到 msvc\build\sgen\x64\bin\lib\mono\4.5\ (创建目录)


然后是把编译好的.net控制台teste-csharp.exe也放到mono的windows执行引擎旁边

复制到 msvc\build\sgen\x64\bin\Debug 


最后就是跑起来啦! 

下图 第一个窗格定义了C语言写的方法,第二个窗格向运行时绑定,第三格就是C#代码了

   小窗口是在输出目录用命令行启动编译好的EXE, 非常顺利!

点击查看原图


嵌入了mono的EXE,不需要.NET Framework环境也能独立跑起来的C#!

当然还要安装VC++2015运行库, 和 .NET Framework 比起来小太多.


接下来还要多熟悉熟悉 看看能不能移植到PSV上 乂目.


标签: 软件开发 C# linux mono C语言

评论(0) 引用(0) 浏览(724)

Powered by emlog 去你妹的备案 sitemap