我正在键入一个shell脚本来查找某些RHEL linux框中的总物理内存.
首先,我想强调一下,我对内核识别的总物理内存感兴趣,而不仅仅是可用内存.因此,请避免建议读取/ proc/meminfo或使用free,top或sar命令的答案- 在所有这些情况下,它们的" 总内存 "值表示" 可用内存 " 值.
首先想到的是读取引导内核消息:
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脚本解析?
我正在尝试编写一些简单的测试代码作为挂钩系统调用表的演示.
"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) 这个问题的变化可以在互联网上找到,但不是答案.
我想要一个具有双拇指范围选择的搜索栏.我愿意自己编程,但我缺乏Android经验.有人可以给我一些指示从哪里开始.我的意思是,我知道我将不得不扩展一些东西(可能是ProgressBar),但是我应该怎么做呢?我是否真的必须重新创建标准搜索栏的所有功能,还是有更简单的方法?
当然也欢迎完整的解决方案;)
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) ARM有一个名为TrustZone的东西.根据ARM文档,它提供了一个进程可以在安全/非安全世界中运行.
请帮助我理解这一点.
我有一个带有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) 从这里:
指令和数据具有不同的访问模式,并访问不同的内存区域.因此,对于指令和数据具有相同的高速缓存可能并不总是有效.
因此,拥有两个缓存是相当普遍的:仅存储指令的指令缓存和仅存储数据的数据缓存.
知道指令和数据之间的区别是直观的,但现在我不确定这种情况下的区别吗?什么构成数据并被放入数据缓存中,什么构成指令并被放入指令缓存?
我知道ARM组装.请问什么需要STR,LDR,LDMF或者STMFD使用数据缓存?但是从技术上来讲STR,LDR,LDMF和STMFD都说明,所以我这就是为什么我很困惑."数据"必须始终存在"指令"吗?是否在该.data部分中考虑了数据?
例如,LDR R1, =myVar那么LDR会进入指令缓存并且myVar的内容会进入数据缓存吗?或者它不是那样的工作?
说明和数据有不同的访问模式有人可以详细说明吗?
我在一篇有用的帖子上发表的评论突显了我难以理解:
"我的想法是,如果一条指令已经从内存中加载,它可能会很快再次使用",但知道下一条指令的唯一方法就是读取它.这意味着内存读取(你不能说它已经在缓存中了,因为新指令是红色的).所以我仍然没有看到这一点?说刚刚发生了LDR指令,所以现在LDR在数据缓存中.可能会发生另一条LDR指令,也许它不会发生,我们无法确定所以我们必须实际读取下一条指令 - 从而破坏了缓存的目的.
我遇到了一些奇怪的问题..我用自定义拇指实现了一个搜索栏.当我在HTC Desire上运行我的应用程序时,一切正常.但是,当我在三星Galaxy上运行它时,拇指会被剪掉!
这是截图..
欲望:

三星Galaxy:

如果有任何想法,我将不胜感激.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) 我开发了一个Linux设备驱动程序.截至目前,我正在Ubuntu 12.04上使用交叉编译器为arm编译它,然后在我的arm Linux映像中进行修改.但我想学习如何在Linux源代码中添加它,并通过配置arm Linux来添加/删除,以便我可以使用Linux源代码编译来编译它?
有任何想法吗?
我有一个简单的控制台应用程序,有时需要执行图形操作,对于那些我正在使用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)