小编art*_*ise的帖子

我怎样才能找到适合shell脚本解析的linux盒子的总物理内存(RAM)?

我正在键入一个shell脚本来查找某些RHEL linux框中的总物理内存.

首先,我想强调一下,我对内核识别的总物理内存感兴趣,而不仅仅是可用内存.因此,请避免建议读取/ proc/meminfo或使用free,topsar命令的答案- 在所有这些情况下,它们的" 总内存 "值表示" 可用内存 " 值.

首先想到的是读取引导内核消息:

Memory: 61861540k/63438844k available (2577k kernel code, 1042516k reserved, 1305k data, 212k init)
Run Code Online (Sandbox Code Playgroud)

但是在某些Linux机箱中,由于在内核启动时使用了EMC2的PowerPath软件及其泛洪启动消息,因此该有用的启动内核消息不可用,甚至在/ var/log/dmesg文件中也是如此.

第二个选项是dmidecode命令(由于某些旧内核和架构的限制,我警告内核识别的RAM和实际RAM可能不匹配).选项--memory简化了脚本,但我意识到该命令的旧版本没有--memory选项.

我的最后一次机会是getconf命令.它报告内存页面大小,但不报告物理页面的总数 - _PHYS_PAGES系统变量似乎是可用的物理页面,而不是总物理页面.

# getconf -a | grep PAGES
PAGESIZE                           4096
_AVPHYS_PAGES                      1049978
_PHYS_PAGES                        15466409

我的问题:是否有其他方法可以获得物理内存的总量,适合由shell脚本解析?

linux ram memory-size

116
推荐指数
9
解决办法
24万
查看次数

Linux Kernel:系统调用挂钩示例

我正在尝试编写一些简单的测试代码作为挂钩系统调用表的演示.

"sys_call_table"不再在2.6中导出,所以我只是从System.map文件中获取地址,我可以看到它是正确的(通过我发现的地址查看内存,我可以看到指向系统调用).

但是,当我尝试修改此表时,内核给出"Oops","无法在虚拟地址c061e4f4处理内核分页请求"并且机器重新启动.

这是运行2.6.18-164.10.1.el5的CentOS 5.4.是否有某种保护或我只是有一个错误?我知道它带有SELinux,我已经尝试将它放入许可模式,但它并没有什么区别

这是我的代码:

#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/moduleparam.h>
#include <linux/unistd.h>

void **sys_call_table;

asmlinkage int (*original_call) (const char*, int, int);

asmlinkage int our_sys_open(const char* file, int flags, int mode)
{
   printk("A file was opened\n");
   return original_call(file, flags, mode);
}

int init_module()
{
    // sys_call_table address in System.map
    sys_call_table = (void*)0xc061e4e0;
    original_call = sys_call_table[__NR_open];

    // Hook: Crashes here
    sys_call_table[__NR_open] = our_sys_open;
}

void cleanup_module()
{
   // Restore the original call
   sys_call_table[__NR_open] = original_call;
}
Run Code Online (Sandbox Code Playgroud)

c hook linux-kernel

67
推荐指数
4
解决办法
6万
查看次数

Android Seekbar有两个拇指

这个问题的变化可以在互联网上找到,但不是答案.

我想要一个具有双拇指范围选择的搜索栏.我愿意自己编程,但我缺乏Android经验.有人可以给我一些指示从哪里开始.我的意思是,我知道我将不得不扩展一些东西(可能是ProgressBar),但是我应该怎么做呢?我是否真的必须重新创建标准搜索栏的所有功能,还是有更简单的方法?

当然也欢迎完整的解决方案;)

android range seekbar

55
推荐指数
2
解决办法
5万
查看次数

如何在GCC插件中添加内置函数?

GCC插件可以添加新的内置函数吗?如果是这样,如何正确地做到这一点?

GCC版本是5.3(或更新).插件编译和处理的​​代码用C语言编写.

在gcc-melt.org的GCC插件基本原理中提到这是可行的,但我看不出如何.

至于我可以在GCC的来源看,利用创建的建宏add_builtin_function()GCC/langhooks.c:

tree
add_builtin_function (const char *name,
                      tree type,
                      int function_code,
                      enum built_in_class cl,
                      const char *library_name,
                      tree attrs)
Run Code Online (Sandbox Code Playgroud)

除了函数function_code的唯一数字ID 之外,该函数的参数应具有哪些值或多或少的清晰度.

看起来(请参阅参考资料add_builtin_function_common()),enum built_in_function预计会有一个值,但GCC插件无法更改该枚举.

人们可以不通过任何随机值大于END_BUILTINS作为function_code要么,它似乎.builtin_decl_implicit()并且builtin_decl_explicit()在这种情况下会有一个失败的断言.

那么,在GCC插件中添加内置的正确方法是什么(不使用MELT等,只需要GCC插件API)?

更新 我再次查看了C 的实现add_builtin_function_common()以及langhooks.builtin_function()C 的实现以及如何在GCC中使用它们.似乎0 function_code在某些情况下是可以接受的.你不能使用builtin_decl_implicit()然后你可以保存返回的DECL add_builtin_function()并在以后使用它.

看起来像我尝试以这种方式创建内置函数的唯一事件是PLUGIN_START_UNIT(否则GCC可能因external_scope变量为NULL 而崩溃).

我在那个阶段尝试了以下内容(fntype之前创建过):

decl = add_builtin_function (
    "my_helper", fntype,
    0 /* function_code */,
    BUILT_IN_NORMAL …
Run Code Online (Sandbox Code Playgroud)

gcc built-in gcc-plugins

38
推荐指数
1
解决办法
846
查看次数

处理ARM TrustZones

ARM有一个名为TrustZone的东西.根据ARM文档,它提供了一个进程可以在安全/非安全世界中运行.

  1. 安全/非安全世界意味着什么.它与处理器执行模式有关,还是与设置内存区域或其他内容的权限有关.
  2. ARM的7种操作模式与安全/非安全世界之间是否存在任何关系.
  3. 如何在ARM中启用TrustZone.
  4. 从哪个版本的ARM引入.
  5. 是否必须使用此TrustZone.Linux内核是否使用此TrustZone扩展.

请帮助我理解这一点.

arm linux-kernel trustzone

29
推荐指数
2
解决办法
2万
查看次数

Linux如何确定模块初始化调用的顺序?

我有一个带有SPI闪存的设备我想在该闪存设备上使用UBIFS文件系统作为我的rootfs.我面临的问题是UBI模块在SPI模块初始化之前初始化.因此,当UBI加载时,它无法连接到我告诉它的UBI设备(通过内核命令行),因此没有rootfs.下面的控制台输出说明了这一点

我一直潜入源代码,看到它init/main.c有一个do_initcalls()简单地调用函数指针列表的函数.这些函数指针指向module_init()内置于内核的模块的所有功能.这些函数指针放在内核二进制文件的特殊部分中,因此在编译时选择此顺序.但是,我还没弄清楚该命令是如何确定的.

    [    0.482500] UBI error: ubi_init: UBI error: cannot initialize UBI, error -19
    [    0.492500] atmel_spi atmel_spi.0: Using dma0chan0 (tx) and  dma0chan1 (rx) for DMA transfers
    [    0.500000] atmel_spi atmel_spi.0: Atmel SPI Controller at 0xf0000000 (irq 13)
    [    0.507500] m25p80 spi0.1: mx25l25635e (32768 Kbytes)
    [    0.512500] Creating 7 MTD partitions on "jedec_flash":
    [    0.520000] 0x000000000000-0x000000020000 : "loader"
    [    0.527500] 0x000000020000-0x000000060000 : "u-boot"
    [    0.537500] 0x000000060000-0x000000080000 : "u-boot-env"
    [    0.547500] 0x000000080000-0x000000280000 : "kernel0"
    [ …
Run Code Online (Sandbox Code Playgroud)

embedded linux-kernel ubifs

25
推荐指数
2
解决办法
2万
查看次数

数据缓存和指令缓存是什么意思?

这里:

指令和数据具有不同的访问模式,并访问不同的内存区域.因此,对于指令和数据具有相同的高速缓存可能并不总是有效.

因此,拥有两个缓存是相当普遍的:仅存储指令的指令缓存和仅存储数据的数据缓存.

知道指令和数据之间的区别是直观的,但现在我不确定这种情况下的区别吗?什么构成数据并被放入数据缓存中,什么构成指令并被放入指令缓存?

我知道ARM组装.请问什么需要STR,LDR,LDMF或者STMFD使用数据缓存?但是从技术上来讲STR,LDR,LDMFSTMFD都说明,所以我这就是为什么我很困惑."数据"必须始终存在"指令"吗?是否在该.data部分中考虑了数据?

例如,LDR R1, =myVar那么LDR会进入指令缓存并且myVar的内容会进入数据缓存吗?或者它不是那样的工作?

说明和数据有不同的访问模式有人可以详细说明吗?

我在一篇有用的帖子上发表的评论突显了我难以理解:

"我的想法是,如果一条指令已经从内存中加载,它可能会很快再次使用",但知道下一条指令的唯一方法就是读取它.这意味着内存读取(你不能说它已经在缓存中了,因为新指令是红色的).所以我仍然没有看到这一点?说刚刚发生了LDR指令,所以现在LDR在数据缓存中.可能会发生另一条LDR指令,也许它不会发生,我们无法确定所以我们必须实际读取下一条指令 - 从而破坏了缓存的目的.

assembly arm cpu-architecture cpu-cache

25
推荐指数
3
解决办法
3万
查看次数

Android搜索栏剪了拇指

我遇到了一些奇怪的问题..我用自定义拇指实现了一个搜索栏.当我在HTC Desire上运行我的应用程序时,一切正常.但是,当我在三星Galaxy上运行它时,拇指会被剪掉!

这是截图..

欲望:

渴望搜索栏

三星Galaxy:

Galaxy seekbar

如果有任何想法,我将不胜感激.tnx

myprogress.xml:

<layer-list xmlns:android="http://schemas.android.com/apk/res/android">

<item android:id="@android:id/background">
    <shape>
        <corners
            android:radius="10dp" />
        <gradient
                android:startColor="@color/gray"
                android:centerColor="@color/gray"
                android:centerY="0.75"
                android:endColor="@color/gray"
                android:angle="270"
        />
    </shape>
</item>

<item android:id="@android:id/secondaryProgress">
    <clip>
        <shape>
        <corners
            android:radius="10dp" />
            <gradient
                    android:startColor="@color/white"
                    android:centerColor="@color/white"
                    android:centerY="0.75"
                    android:endColor="@color/white"
                    android:angle="270"
            />
        </shape>
    </clip>
</item>

<item android:id="@android:id/progress">
    <clip>
        <shape>
        <corners
            android:radius="10dp" />
            <gradient
                android:startColor="#FFA500"
                android:centerColor="@color/yellow"
                android:centerY="0.75"
                android:endColor="@color/yellow"
                android:angle="270"
            />
        </shape>
    </clip>
</item>
Run Code Online (Sandbox Code Playgroud)

样式:

<style name="mySeekBar">
    <item name="android:indeterminateOnly">false</item>
    <item name="android:progressDrawable">@drawable/myprogress</item>
    <item name="android:indeterminateDrawable">@android:drawable/progress_horizontal</item>
    <item name="android:minHeight">10dip</item>
    <item name="android:maxHeight">10dip</item>
    <item name="android:thumb">@drawable/thumb</item>
    <item name="android:thumbOffset">4dp</item>
    <item name="android:focusable">true</item>
Run Code Online (Sandbox Code Playgroud)

seekbar xml:

<SeekBar …
Run Code Online (Sandbox Code Playgroud)

android seekbar clipped

24
推荐指数
3
解决办法
2万
查看次数

在linux源代码中添加新的驱动程序代码

我开发了一个Linux设备驱动程序.截至目前,我正在Ubuntu 12.04上使用交叉编译器为arm编译它,然后在我的arm Linux映像中进行修改.但我想学习如何在Linux源代码中添加它,并通过配置arm Linux来添加/删除,以便我可以使用Linux源代码编译来编译它?

有任何想法吗?

linux-device-driver linux-kernel

18
推荐指数
3
解决办法
4万
查看次数

如何停止"JavaFX应用程序线程"

我有一个简单的控制台应用程序,有时需要执行图形操作,对于那些我正在使用JavaFx框架(我需要一些函数,如文本的CSS样式)我只是生成一些形状和文本到一个隐藏的场景然后保存那些存档的,就是这样,

我知道要使用JavaFx我必须将图形操作传递给JavaFx线程,但是当一切都完成后我必须关闭应用程序(几个小时后),这个JavaFx线程仍然保持打开状态......我真的不会想要强制退出System.exit(),因为如果有什么东西被阻止我可能想知道/等待(我也不想将所有内容都作为JavaFx应用程序执行(因为JavaFx组件不到我主应用程序的1%)

代码非常简单,谷歌搜索我发现只使用

Platform.exit();
Run Code Online (Sandbox Code Playgroud)

这似乎不起作用,我也试过玩平台参数,如

Platform.setImplicitExit(false);
Run Code Online (Sandbox Code Playgroud)

这是我可以运行的测试应用程序:

import javafx.application.Platform;
import javafx.embed.swing.JFXPanel;
import javafx.geometry.Pos;
import javafx.scene.layout.VBox;

public class SOTestFX {
    public static void main(String[] args) {
        SOTestFX t = new SOTestFX();
        t.runFxThread();
    }

    public  void runFxThread(){
        //Application.launch(args);
        final JFXPanel jfxPanel = new JFXPanel(); 
        Platform.runLater(new Runnable() {
            @Override
            public void run() {

                System.err.println("CREATING IMAGE");
                simpleFXoperations();
                System.err.println("NOW CALL EXIT");
                System.err.println("JAVA FX THREAD SHOULD BE EXITED NOW");
                Platform.exit();
            }
        });

        try {
            Thread.sleep(3000); // just wait a bit if something should happen, let it …
Run Code Online (Sandbox Code Playgroud)

java javafx javafx-2

17
推荐指数
2
解决办法
2万
查看次数