linux random() linux vi编辑器

大家好,今天来为大家解答linux random()这个问题的一些问题点,包括linux vi编辑器也一样很多人还不知道,因此呢,今天就来为大家分析分析,现在让我们一起来看看吧!如果解决了您的问题,还望您关注下本站哦,谢谢~

linux有那些朴克游戏(名称)

以 Ubuntu为例,它的桌面是基于 Gnome的,默认安装了“AisleRiot接龙”这个纸牌游戏包,它汇集了超过 80款不同的单人纸牌游戏,包括蜘蛛纸牌、空当接龙、Klondike、13点(金字塔)、Yukon、Canfield等热门纸牌游戏。

按下键盘上的 Win键,调出 Dash,在搜索框中输入“纸牌”,Dash给出搜索结果,点击启动。

默认是一种叫“克朗代克“的纸牌游戏。点击“aisleRiot接龙游戏”菜单,在下拉菜单中点击“换游戏”。

在弹出的“选择游戏”对话框中,有上百种纸牌游戏可供选择。

比如在 Windows下熟悉的“空档接龙”,以及“蜘蛛纸牌”和“纸牌搬家“等。以下是“空档接龙”的界面。

ZYNQ+linux网口调试笔记(3)PL-ETH

在ZYNQ上使用gigE Vision协议的网络接口相机。

第一步:调通PS侧网口GEM0(Xilinx BSP默认配好)。

第二步:调通PS侧网口GEM1(见前一篇文档:开发笔记(1))。

第三步:调通PL侧网口(本文阐述)。

第四步:在PL侧网口上验证Jumbo Frame特性,并在应用层适配gigE Vision协议。

根据《xapp1082》可知,PL侧的PHY支持1000Base-X和SGMII两种配置,这两种配置对应两种不同的PHY引脚接口(连接到MAC)。而我们的hdf文件使用的是1000Base-X的配置。

关于网口的Linux驱动,我们在官网找到一份资料: Xilinx Wiki- Zynq PL Ethernet。资料很长,我们只看与我们相关的2.4.1 PL Ethernet BSP installation for 1000Base-X”这一章节就可以了。

首先导入FPGA设计同事提供的hdf文件:

在弹出的图形界面里,进入Subsystem AUTO Hardware Settings——Ethernet Settings——Primary Ethernet,确认可以看到PL侧网络设备axi_ethernet_0,说明hdf文件里已包含了必要的网口硬件信息:

上图中被选中的网口将成为Linux上的设备eth0。这里我们默认选择ps7_ethernet_0,即使用GEM0作为首选网口。

启用Xilinx AXI Ethernet驱动

进入Device Drivers-- Network device support–选中Xilinx AXI Ethernet(以及Xilinx Ethernet GEM,这是PS侧网口的驱动)

进入Networking support–选中 Random ethaddr if unset

进入Device Drivers-- Network device support-- PHY Device support and infrastructure–启用Drivers for xilinx PHYs

进入~~~~Device Drivers-- DMA Engine Support-–禁用~~~~Xilinx AXI DMAS Engine~~~(对应的配置项名为~~ CONFIG_XILINX_DMA~~~)

注意: Xilinx Wiki里对设备树节点的引用有误(&axi_ethernet),导致编译报错,应改为&axi_ethernet_0。

注:PL-ETH驱动所在路径:<project>/build/tmp/work-shared/plnx_arm/kernel-source/drivers/net/ethernet/xilinx/xilinx_axienet_main.c和xilinx_axienet_mdio.c。对应的内核配置项为CONFIG_NET_VENDOR_XILINX和CONFIG_XILINX_AXI_EMAC。

启用ethtool和tcpdump(调试用,非必须):

然后将生成的BOOT.BIN和image.ub拷贝到SD卡根目录下,将SD卡插入板子上,上电运行。

上电后,使用ifconfig eth1查看网口信息,观察MAC地址与设置的一致,且ifconfig eth1 192.168.1.11 up没有报错。

测试网络通路:ping PC是通的。说明网口工作正常。

Linux下eth1(即PL-ETH)的MAC地址有误

问题描述:

开机打印:

注意:

MAC地址是错的,驱动里解析出的是GEM0的MAC地址。

试验发现,即使在system-user.dtsi里不写local-mac-address,也照样解析出的是GEM0的MAC。

而将system-user.dtsi里的local-mac-address改名为pl-mac-address,并将驱动里解析的字符串也对应更改为pl-mac-address,则可以正确解析出来:

Passing MAC address to kernel via Device Tree Blob and U-Boot:

通过更改u-boot环境变量和设备树,为每个板子设置一个独特的MAC地址:

U-Boot里的环境变量ethaddr会覆盖掉设备树里pl-eth的local-mac-addr字段,从而影响Linux启动后的网卡MAC地址;

但U-Boot里的环境变量ipaddr不会对Linux启动后的配置产生任何影响。因为设备树里根本就没有关于IP地址的配置。

phy-mode怎么会是sgmii?查了下官方的提供的BSP里,也是“sgmii”。说明这个没问题。具体原因不清楚。

@TODO:设备树里的中断号的顺序如何影响功能?

为何读出来的IRQ号不对呢?这是因为这里读到的不是硬件的中断号,而是经过系统映射之后的软件IRQ number。两者不具有线性关系。

关于中断号的疑问:

Linux上的网口eth0、eth1的顺序,似乎是按照phy地址从小到大来排布的。

Xilinx xapp1082-zynq-eth.pdf(v5.0) July 16, 2018

Xilinx Wiki- Zynq PL Ethernet:

Xilinx Wiki- Linux Drivers:

Xilinx Wiki- Linux Drivers- Macb Driver:

Xilinx Wiki- Zynq Ethernet Performance:

查到关于Jumbo frame MTU的定义,当前值为9000,可否改大一些?

驱动源码里关于jumbo frame的说明:

设置MTU为9000,发现ping包最大长度只能设为ping 192.168.1.10-s 1472

【完】

cat /proc/sys/kernel/random/uuid 为什么能得到

通用的GUID的结构如下typedefstruct_GUID{DWORDData1;WORDData2;WORDData3;BYTEData4[8];}GUID;举一个例子:假设一个GUID的格式是这样的6B29FC40-CA47-1067-B31D-00DD010662DA其中Data1是32位,可以看做8个四位十六进制数,对应于上面的6B29FC40其中Data2是16位,可以看做4个四位十六进制数,对应于上面的CA47其中Data3是16位,可以看做4个四位十六进制数,对应于上面的1067其中Data4比较特殊,是8个字节也就可以看做16个四位十六进制数取其Data4[0],Data4[1]来组成4个四位十六进制数,对应于上面的B31D取其Data4[2],Data4[3]来组成4个四位十六进制数,对应于上面的00DD取其Data4[4],Data4[5]来组成4个四位十六进制数,对应于上面的0106取其Data4[6],Data4[7]来组成4个四位十六进制数,对应于上面的62DA*注意:四位十六进制数对应一个GUID字符。在Windows下提供了一个函数可以生成一个GUID。需要使用的头文件"objbase.h",需要链接的库ole32.lib。HRESULTCoCreateGuid(GUID*pguid);在Linux下首先需要下载到相应的库文件和头文件如果是Debian用户可以方便的通过apt命令来获取相关资源。apt-getinstalluuid-dev安装完成后会发现在/usr/include/下有一个uuid文件夹,其中则包含了uuid.h头文件。在/usr/lib/下有几个libuuid*的链接库文件,包括静态和动态链接库。打开uuid.h你会发现有一个uuid_generate(uuid_tout)的函数声明。我们可以通过调用这个函数来生成UUID。uuid_generate(reinterpret_cast(&guid));生成GUID是不是很简单!是的,因为生成的算法不用我们去实现,我们是站在前人的肩膀所以我们要感谢他们。下面给出一个WINDOWS和LINUX下通用的程序。//uuid_test.cpp#include#include#include#include"uuid_test.hpp"#ifdefWIN32#include#else#include#endifusingnamespacestd;namespaceChinuxTeam{GUIDCreateGuid(){GUIDguid;#ifdefWIN32CoCreateGuid(&guid);#elseuuid_generate(reinterpret_cast(&guid));#endifreturnguid;}std::stringGuidToString(constGUID&guid){charbuf[64]={0};#ifdef__GNUC__snprintf(#else//MSVC_snprintf_s(#endifbuf,sizeof(buf),"{%08X-%04X-%04X-%02X%02X-%02X%02X%02X%02X%02X%02X}",guid.Data1,guid.Data2,guid.Data3,guid.Data4[0],guid.Data4[1],guid.Data4[2],guid.Data4[3],guid.Data4[4],guid.Data4[5],guid.Data4[6],guid.Data4[7]);returnstd::string(buf);}}对应的头文件//uuid_test.hpp"#include#include#includetypedefstruct_GUID{unsignedlongData1;unsignedshortData2;unsignedshortData3;unsignedcharData4[8];}GUID,UUID;namespaceChinuxTeam{GUIDCreateGuid();std::stringGuidToString(constGUID&guid);}//namespaceChinuxTeam

最后一个GuidToString()稍微解释一下,作用就是把GUID以固定的格式输出到标准string字符串中,根据编译器的不同调用分别调用了不同的字符串打印函数。

另外附一个简单的测试函数

#include#include#include#ifdefWIN32#include"objbase.h"#elsetypedefstruct_GUID{unsignedlongData1;unsignedshortData2;unsignedshortData3;unsignedcharData4[8];}GUID,UUID;#endifnamespaceChinuxTeam{GUIDCreateGuid();std::stringGuidToString(constGUID&guid);}运行后会生成一个GUID并打印到标准输出的控制台上。

阅读剩余
THE END