May I suggest using the '-r, --relative' flag from 'ln':
-r, --relative
create symbolic links relative to link location
My life felt considerably better after discovering that feature :)
// Martin
On 23/08/2018 08.12, Ryan Harkin wrote:
On 22 August 2018 at 23:55, Andre McCurdy <[email protected]
<mailto:[email protected]>> wrote:
On Wed, Aug 22, 2018 at 2:56 PM, Ryan Harkin <[email protected]
<mailto:[email protected]>> wrote:
> On Wed, 22 Aug 2018, 21:42 Andre McCurdy, <[email protected]
<mailto:[email protected]>> wrote:
>> On Wed, Aug 22, 2018 at 1:10 PM, Ryan Harkin
<[email protected] <mailto:[email protected]>>
>> wrote:
>> > On Wed, 22 Aug 2018, 20:02 Martin Jansa,
<[email protected] <mailto:[email protected]>> wrote:
>> >>
>> >> Your 1st parameter is wrong, compare again with the example I
gave you
>> >> (don't include "brcm/" path in 1st param, because you want
the symlink
>> >> to
>> >> point to just brcmfmac43430-sdio.AP6212.txt like you did in
the version
>> >> after cd).
>> >
>> > That doesn't work either. I tried it with the same result, but
didn't
>> > send a
>> > log of it. That works for you?
>>
>> Martin's example is correct so maybe check your tests again for
typos.
>> It it still doesn't work then please do send a log.
>>
>> The link will point to whatever you define via the first
parameter, so
>> if you changed the first parameter it shouldn't be possible to get
>> "the same result".
>>
>> $ mkdir foo
>> $ ln -sf test_target foo/test1
>> $ ln -sf brcm/test_target foo/test2
>> $ ls -l foo
>>
>> lrwxrwxrwx 1 andre andre 11 Aug 22 13:35 test1 -> test_target
>> lrwxrwxrwx 1 andre andre 16 Aug 22 13:35 test2 -> brcm/test_target
>
> Yes, that's essentially the same as what I'm getting.
>
> Now try "cat foo/test1" and what happens?
>
> There is no file called test_target in the foo directory. And
neither is
> there a file called brcm/test_target in the foo directory.
Correct. The above was just an example to show that you can * create
symlinks * in the foo directory without cd'ing into the foo directory
first.
If you'd like the symlinks in the example to point to valid targets
then you need to create the targets too, e.g.
$ mkdir -p foo/brcm
$ echo hello > foo/test_target
$ echo hello2 > foo/brcm/test_target
But note that the process of creating a symlink is always the same,
regardless of whether the symlink points to a valid target or not (so
you can run these extra commands to create the targets before or after
you create the symlinks).
So that doesn't work for me how I expect it to work. I must be missing
something fundamental here.
The recipe is trying to create a soft link from a file in the current
directory to a file in the sub-directory. On my system, your example
creates links from a file in the sub-directory to the another file in
the sub-directory.
So, to copy your example, but creating the file "test_target" from the
start:
$ mkdir -p /tmp/test
$ cd /tmp/test
$ mkdir foo
$ echo 1 > test_target
$ ln -sf test_target foo/test1
$ ln -sf brcm/test_target foo/test2
$ ls -l foo
total 0
lrwxrwxrwx 1 ryan ryan 11 Aug 23 06:54 test1 -> test_target
lrwxrwxrwx 1 ryan ryan 16 Aug 23 06:54 test2 -> brcm/test_target
$ cat test_target
1
$ cat foo/test1
cat: foo/test1: No such file or directory
$ cat foo/test2
cat: foo/test2: No such file or directory
$ echo hello > foo/test_target
$ echo hello2 > foo/brcm/test_target
bash: foo/brcm/test_target: No such file or directory
$ cat foo/test1
hello
$ cat foo/test2
cat: foo/test2: No such file or directory
$ cat test_target
1
$ tree
.
├── foo
│ ├── test1 -> test_target
│ ├── test2 -> brcm/test_target
│ └── test_target
└── test_target
1 directory, 4 files
So, neither test1 nor test2 are linked to /tmp/test/test_target. test1
is linked to /tmp/test/foo/test_target and test2 is linked to
/tmp/test/brcm/test_target, which doesn't exist.
AFAIK, when creating a softlink, you have to give it either an absolute
path, or a path relative to the link being created. The path cannot be
relative to the original file that you want to link to.
So, this will work:
$cd /tmp/test
$ ln -sf ../test_target foo/test3
$ cat foo/test3
1
$ cat /tmp/test/foo/test3
1
But that is a strange way to create the soft link, IMO.
AFAICT, for the recipe, to get rid of the "cd", I'd have to specify an
absolute path to the original file:
+do_install_append_bcm43430-nvram-mur1dx() {
+ ( ln -sf ${PWD}/brcmfmac43430-sdio.MUR1DX.txt
${D}${nonarch_base_libdir}/firmware/brcm/brcmfmac43430-sdio.txt)
... assuming PWD is available to the recipe. There will be a proper
Yocto variable I can use, of course, but I can't think of it right now.
Either way, Martin's example doesn't work for me. And adding the
absolute path of the original file doesn't seem any neater or clearer
than following the TI example from the do_install a few lines up in the
recipe. But I'm happy to do it either way, so long as it works.
--
Kind regards,
Martin Hundebøll
Embedded Linux Consultant
+45 61 65 54 61
[email protected]
Geanix IVS
https://geanix.com
DK39600706
--
_______________________________________________
Openembedded-core mailing list
[email protected]
http://lists.openembedded.org/mailman/listinfo/openembedded-core