如何查找哪个Yocto Project配方填充图像根文件系统上的特定文件

时间:2017-02-15 19:22:49

标签: linux embedded-linux yocto bitbake openembedded

我与Yocto项目合作很多,而且常见的挑战是确定rootf上包含文件的原因(或从哪个配方开始)。这可以有希望从构建系统的环境,日志和扩展中获得。元数据。理想情况下,一组命令允许将文件链接回源(即配方)。

我通常的策略是对元数据执行搜索(例如grep -R filename ../layers/*)并在互联网上搜索所述文件名以查找可能负责任的食谱的线索。但是,这并不总是非常有效。在许多情况下,文件名未在配方中明确说明。此外,在许多情况下,文件名由多个配方提供,这导致额外的工作以找到最终提供它的配方。当然还有很多其他线索可以找到答案。无论如何,当构建系统看起来应该有足够的信息来解决答案时,这种调查通常非常费力。

3 个答案:

答案 0 :(得分:19)

这是oe-pkgdata-util脚本及其子命令find-path的确切用例。该脚本是openembedded-core的一部分。

请参阅此示例(在OE构建环境中执行,即bitbake有效):

tom@pc:~/oe/build> oe-pkgdata-util find-path /lib/ld-2.24.so
glibc: /lib/ld-2.24.so

你可以清楚地看到这个库属于glibc配方。

oe-pkgdata-util有更多有用的子命令来查看有关包和食谱的信息,值得查看--help

答案 1 :(得分:3)

如果您更喜欢图形演示文稿,Toaster Web UI还会向您显示此信息以及相关信息。

答案 2 :(得分:1)

为每个食谱部署的候选文件放在每个$ WORKDIR / image

所以你可以cd到

var w = 500;
var h = 300;
var dataset = {
    nodes:[
            {name:"Adam"},
            {name:"Bob"},
            {name:"Carrie"},
            {name:"Donovan"},
            {name:"Edward"},
            {name:"Felicity"},
            {name:"George"},
            {name:"Hannah"},
            {name:"Iris"},
            {name:"Jerry"}
    ],
    edges:[
            {source: 0, target: 1, distance: 200},
            {source: 0, target: 1, distance: 200},
            {source: 0, target: 3, distance: 100},
            {source: 0, target: 4, distance: 200},
            {source: 1, target: 5, distance: 200}
    ]
};
var force = d3.layout.force()
                        .nodes(dataset.nodes)
                        .links(dataset.edges)
                        .size([w, h])
                        .linkDistance(function(link) { return link.distance })
                        .charge([-150])
                        .start();

var colors = d3.scale.category10();
var svg = d3.select("body")
                .append("svg")
                .attr("width", w)
                .attr("height", h);
var edges = svg.selectAll("line")
                .data(dataset.edges)
                .enter()
                .append("line")
                .style("stroke", "#ccc")
                .style("stroke-width", 5);
var nodes = svg.selectAll("circle")
                .data(dataset.nodes)
                .enter()
                .append("circle")
                .attr("r", 10)
                .style("fill", function(d, i){
                    return colors(i);
                })
                .call(force.drag);

var label = svg.selectAll(".mytext")
                .data(dataset.nodes)
                .enter()
                .append("text")
                .text(function (d) { return d.name; })
                .style("text-anchor", "middle")
                .style("fill", "#555")
                .style("font-family", "Arial")
                .style("font-size", 12);



force.on("tick", function(){
    edges.attr("x1", function(d){ return d.source.x; })
         .attr("y1", function(d){ return d.source.y; })
         .attr("x2", function(d){ return d.target.x; })
         .attr("y2", function(d){ return d.target.y; });
    nodes.attr("cx", function(d){ return d.x; })
         .attr("cy", function(d){ return d.y; });
    label.attr("x", function(d){ return d.x; })
         .attr("y", function (d) {return d.y - 10; });


});

并执行

$ cd ${TMPDIR}/work/${MULTIMACH_TARGET_SYS}

从结果中你应该能够推断部署这种文件的配方的$ {PN}。

例如:

$ find . -path '*/image/*/fileYouAreLookingFor'